home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / f / finanzen / spesen.gfa (.txt) < prev    next >
Encoding:
GFA-BASIC Atari  |  1996-09-18  |  86.0 KB  |  3,176 lines

  1. ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. ' +                 W O C H E N A B R E C H N U N G                    +
  3. ' +                 T.GRÜTZMACHER C 1988,89,90,91                      +
  4. ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5. ' + 1990 mit Erweiterung für Spesensätze des Auslands                  +
  6. ' + und mit editierbarem Feld für die KM-DM, die für Firmenwagenfahrer +
  7. ' + als Eingabefeld zur Verfügung stehen müssen (dabei KM=0)           +
  8. ' + - Vers. 1.10 erhält eine aufrufbare Bibliothek der Auslandsspesen  +
  9. ' +              und eine Datumsfunktion im Menü und im Ortsstring     +
  10. ' + - Vers. 1.11 erhält eine Formulardruckroutine, die mit einer       +
  11. ' +              Steuerdatei arbeitet und eine einfache Code-Sprache   +
  12. ' +              verwendet,                                            +
  13. ' + 1991:                                                              +
  14. ' + - Vers. 1.12 screenrestore nach ACC-Aufruf                         +
  15. ' +              Tastenbedienung alternativ zu Menübedienung           +
  16. ' +              Hilfsmenü nach HELP-Taste                             +
  17. ' +              Wochenarbeitszeit in HH.MM                            +
  18. ' +              Wochenarbeitszeit in Stat.-Grafik -Pause wenn im Büro +
  19. ' + - Vers. 1.13 Übergabe an Monatsmodul                               +
  20. ' +              Berichtigte Mehrarbeitsangabe                         +
  21. ' +              kein Doppeldatum mehr bei File-load                   +
  22. ' +              variable Slidergröße bei Auslandsbox                  +
  23. ' +              Summenbildung bei Wochenmodul-drucken                 +
  24. ' +              Formulardateisteuerung bei Wochenmodul-drucken        +
  25. ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  26. '
  27. '
  28. ' -------------------------
  29. '  VERSION :
  30. version$="Vers."+"1.13"
  31. ' -------------------------
  32. '
  33. DEFMOUSE 0
  34. @init_hintergrund
  35. '
  36. laufwerk%=GEMDOS(&H19)
  37. laufwerk$=CHR$(laufwerk%+65)
  38. pfad$=laufwerk$+":"+DIR$(0)+"\"                 ! defaultpfad für alle=homedir
  39. mittag#=2.5                                      ! def. der 5x0.5h mittagspause
  40. '
  41. DIM tree1|(10)  ! erster baum  = add_feld
  42. DIM tree2|(25)  ! zweiter baum = definitionsfeld
  43. DIM ort$(7)
  44. DIM h_aussen#(7)
  45. DIM h_calc#(7)
  46. DIM werte#(8,8)
  47. DIM button#(3,7)
  48. DIM seq#(10,10)
  49. DIM zeile1&(1600)
  50. DIM zeile2&(1600)
  51. DIM auslandflag!(7)
  52. DIM datum$(7)
  53. '
  54. IF WORK_OUT(0)<639                                   ! CHECK RESOLUTION
  55.   ~FORM_ALERT(1,"[1][NUR IN HOHER AUFLÖSUNG|][SORRY]")
  56.   END
  57. ENDIF
  58. '
  59. IF RSRC_LOAD("SPESEN.RSC")=0
  60.   ~FORM_ALERT(1,"[1][Resourcefile SPESEN.RSC|   nicht gefunden][Abbruch]")
  61.   END
  62. ENDIF
  63. '
  64. IF NOT EXIST("SPESEN.AUS")              ! Auslandspesensätze
  65.   ~FORM_ALERT(1,"[1][Parameterfile SPESEN.AUS|    nicht gefunden!!|  Bitte neu erstellen!][Abbruch]")
  66.   END
  67. ELSE
  68.   @ausland_laden
  69. ENDIF
  70. IF NOT EXIST("SPESEN.DEF")
  71.   ALERT 1,"Parameterfile SPESEN.DEF|    nicht gefunden!!|  Bitte neu erstellen!!",1," OK ",dummy!
  72.   @definition_feld
  73. ELSE
  74.   @def_laden
  75. ENDIF
  76. '
  77. CLS
  78. OPENW 0
  79. '
  80. @menue_init
  81. @def_read
  82. @default
  83. @datum_berechnen(DATE$,datum$())
  84. @bildaufbau
  85. @werte_eintragen
  86. '
  87. ON MENU GOSUB menue_auswertung                  ! menü-ereignis
  88. ON MENU BUTTON 1,1,0 GOSUB mausauswertung       ! maus- und nicht menü-ereignis
  89. ON MENU KEY GOSUB key_auswertung
  90. '
  91. DO
  92.   REPEAT
  93.     ON MENU
  94.     ~WIND_GET(0,10,handle&,dummy&,dummy&,dummy&)
  95.   UNTIL handle&=0
  96. LOOP
  97. '
  98. '
  99. > PROCEDURE menue_auswertung
  100.   IF MENU(5)=crmess&
  101.     @messagebox
  102.   ENDIF
  103.   '
  104.   IF MENU(5)=newpage&
  105.     @neues_blatt
  106.   ENDIF
  107.   '
  108.   IF MENU(5)=mondayte&
  109.     @montag
  110.     @werte_eintragen
  111.   ENDIF
  112.   '
  113.   IF MENU(5)=initdata&
  114.     @definition_feld
  115.   ENDIF
  116.   '
  117.   IF MENU(5)=hrdcpy&
  118.     @select_hardcopy
  119.   ENDIF
  120.   '
  121.   IF MENU(5)=lister&
  122.     @liste_drucken
  123.   ENDIF
  124.   '
  125.   IF MENU(5)=formular&
  126.     @formular
  127.   ENDIF
  128.   '
  129.   IF MENU(5)=statist&
  130.     @statistik
  131.   ENDIF
  132.   '
  133.   IF MENU(5)=datfile&
  134.     @datenfile_speichern
  135.   ENDIF
  136.   '
  137.   IF MENU(5)=gomonat&
  138.     @gomonat
  139.   ENDIF
  140.   '
  141.   IF MENU(5)=menufin&
  142.     @finito
  143.   ENDIF
  144.   '
  145.   ~MENU_TNORMAL(menu_adr%,MENU(4),1)    ! menu aus
  146. RETURN
  147. > PROCEDURE key_auswertung
  148.   LOCAL dummy|
  149.   ~MENU_TNORMAL(menu_adr%,MENU(4),1)    ! menu aus
  150.   IF MENU(14) DIV 256=98
  151.     @hilfe
  152.   ENDIF
  153.   IF MENU(14) DIV 256=59                ! F1
  154.     ALERT 2,"Bildschirm neu|  aufbauen?",1," OK |Abbruch",dummy|
  155.     IF dummy|=1
  156.       CLS
  157.       @bildaufbau
  158.       @default
  159.       @datum_berechnen(DATE$,datum$())
  160.       @werte_eintragen
  161.     ENDIF
  162.   ENDIF
  163.   IF MENU(14) DIV 256=60                ! F2
  164.     @datenfile_laden
  165.   ENDIF
  166.   '
  167.   IF MENU(14) DIV 256=61                ! F3
  168.     @montag
  169.     @werte_eintragen
  170.   ENDIF
  171.   '
  172.   IF MENU(14) DIV 256=62                ! F4
  173.     @definition_feld
  174.   ENDIF
  175.   '
  176.   IF MENU(14) DIV 256=63                ! F5
  177.     ALERT 1,"Drucker für hardcopy|    bereitmachen",1," OK |Abbruch",dummy|
  178.     IF dummy|=1
  179.       @screen_dump_9_needle
  180.     ENDIF
  181.   ENDIF
  182.   IF MENU(14) DIV 256=64                ! F6
  183.     ALERT 1,"Drucker für hardcopy|    bereitmachen",1," OK |Abbruch",dummy|
  184.     IF dummy|=1
  185.       @screen_dump
  186.     ENDIF
  187.   ENDIF
  188.   '
  189.   IF MENU(14) DIV 256=65                ! F7
  190.     @liste_drucken
  191.   ENDIF
  192.   '
  193.   IF MENU(14) DIV 256=66                ! F8
  194.     @formular
  195.   ENDIF
  196.   '
  197.   IF MENU(14) DIV 256=67                ! F9
  198.     @datenfile_speichern
  199.   ENDIF
  200.   '
  201.   IF MENU(14) DIV 256=68                ! F10
  202.     @statistik
  203.   ENDIF
  204.   '
  205.   IF MENU(14) DIV 256=50                ! alt M
  206.     @gomonat
  207.   ENDIF
  208.   '
  209.   IF MENU(14) MOD 256=3                 ! ^C
  210.     @finito
  211.   ENDIF
  212.   '
  213. RETURN
  214. > PROCEDURE select_hardcopy
  215.   LOCAL dummy|
  216.   ALERT 2,"   EPSON 9-NADEL SPEZIAL|oder TOS Universal Hardcopy",0,"SPEZIAL|NORMAL|NIX",dummy|
  217.   IF dummy|=1
  218.     @screen_dump_9_needle
  219.   ELSE IF dummy|=2
  220.     @screen_dump
  221.   ENDIF
  222. RETURN
  223. > PROCEDURE mausauswertung
  224.   MOUSE x#,y#,t#           ! nachdem mit mouseclick verzweigt wurde, hier x,y,t
  225.   IF t#=1                ! holen. ist so wesentlich schneller als  das
  226.     addflag!=FALSE      ! auslesen der MENU(10-12)-Einträge
  227.   ENDIF
  228.   IF t#=2 AND x#>480
  229.     addflag!=TRUE       ! Aditionsfeld für letzte beiden Spalten aufrufen
  230.   ENDIF
  231.   IF t#=2 OR t#=1 AND x#>380 AND x#<430
  232.     z#=INT((y#-ybase#)/sprung#)
  233.     auslandflag!(z#)=TRUE       ! Aditionsfeld für letzte beiden Spalten aufrufen
  234.   ENDIF
  235.   '
  236.   IF t#<>0
  237.     IF y#>ybase# AND y#<yend#
  238.       @editieren
  239.     ENDIF
  240.     IF y#>yend#+49 AND x#>400 AND x#<490
  241.       @kw
  242.     ENDIF
  243.     IF y#>yend#+25 AND y#<yend#+49 AND x#>490 AND x#<639
  244.       @persnr
  245.     ENDIF
  246.     IF y#>yend#+49 AND x#>490 AND x#<639
  247.       @kostst
  248.     ENDIF
  249.     IF y#>yend#+49 AND x#>160 AND x#<400
  250.       @nomen
  251.     ENDIF
  252.   ENDIF
  253. RETURN
  254. > PROCEDURE bildaufbau
  255.   sprung#=40
  256.   ybase#=30
  257.   yend#=ybase#+sprung#*7
  258.   LINE 0,ybase#,640,ybase#
  259.   LINE 20,0,20,yend#+25        !datum
  260.   LINE 180,0,180,yend#+25      !ort/kunde, F , M , E
  261.   LINE 230,0,230,yend#+25      !km
  262.   LINE 280,0,280,yend#+25      !DM für km
  263.   LINE 330,0,330,yend#         !zeit von
  264.   LINE 380,0,380,yend#+25      !zeit bis
  265.   LINE 430,0,430,yend#+25      !dm tagesspesen
  266.   LINE 480,0,480,yend#+25      !dm nachtspesen
  267.   LINE 530,0,530,yend#+25      !dm spesen nach beleg
  268.   LINE 580,0,580,yend#+25      !dm nebenkosten
  269.   DEFTEXT 1,0,0,4
  270.   TEXT 1,ybase#-15+sprung#*1,"Mo."
  271.   TEXT 1,ybase#-15+sprung#*2,"Di."
  272.   TEXT 1,ybase#-15+sprung#*3,"Mi."
  273.   TEXT 1,ybase#-15+sprung#*4,"Do."
  274.   TEXT 1,ybase#-15+sprung#*5,"Fr."
  275.   TEXT 1,ybase#-15+sprung#*6,"Sa."
  276.   TEXT 1,ybase#-15+sprung#*7,"So."
  277.   TEXT 1,ybase#-15,"TAG"
  278.   TEXT 22,ybase#-15,"       ORT / KUNDE"
  279.   TEXT 182,ybase#-15,"   KM"
  280.   TEXT 232,ybase#-18,"   DM"
  281.   TEXT 232,ybase#-10," für KM"
  282.   TEXT 284,ybase#-23,"UHRZEIT"
  283.   TEXT 284,ybase#-16,"  von"
  284.   TEXT 282,ybase#-3,"h-AUSSEN"
  285.   TEXT 334,ybase#-23,"UHRZEIT"
  286.   TEXT 334,ybase#-16,"  bis"
  287.   TEXT 334,ybase#-3,"h-calc."
  288.   TEXT 384,ybase#-18,"  DM"
  289.   TEXT 384,ybase#-10,"TAGESSP"
  290.   TEXT 434,ybase#-18,"  DM"
  291.   TEXT 434,ybase#-10,"NACHTSP"
  292.   TEXT 484,ybase#-21,"  DM"
  293.   TEXT 484,ybase#-13," SPESEN"
  294.   TEXT 484,ybase#-5,"n.BELEG"
  295.   TEXT 534,ybase#-18,"  DM"
  296.   TEXT 534,ybase#-10,"NEBENK."
  297.   TEXT 584,ybase#-18," ->DM<-"
  298.   FOR i#=1 TO 7
  299.     k#=ybase#+sprung#*i#
  300.     LINE 0,k#,640,k#
  301.     LINE 280,k#-sprung#/2,330,k#-sprung#/2
  302.     LINE 330,k#-sprung#/2,380,k#-sprung#/2  !************ Berechnete Arbeitszeit
  303.     BOX 160,k#-5,170,k#-15
  304.     BOX 140,k#-5,150,k#-15
  305.     BOX 120,k#-5,130,k#-15
  306.     TEXT 163,k#-8,"E"
  307.     TEXT 143,k#-8,"F"
  308.     TEXT 123,k#-8,"M"
  309.   NEXT i#
  310.   DEFTEXT 1,0,0,13
  311.   LINE 280,ybase#-12,380,ybase#-12      !zwischenlinie oben bei arbeitszeit
  312.   LINE 640,ybase#,640,yend#+25
  313.   BOX 582,yend#+2,638,yend#+23
  314.   LINE 0,yend#+25,640,yend#+25
  315.   TEXT 584,ybase#-10,"SUMME:"
  316.   TEXT 30,yend#+20,"SUMME:"
  317.   LINE 400,yend#+49,400,380
  318.   LINE 160,yend#+49,160,380
  319.   LINE 490,yend#+25,490,380
  320.   LINE 160,yend#+49,639,yend#+49
  321. RETURN
  322. > PROCEDURE screen_dump
  323.   MENU OFF
  324.   ALERT 1,"Switch on| printer",1," OK | NO ",reply%
  325.   IF reply%=1
  326.     CLOSEW 0
  327.     ~MENU_BAR(menu_adr%,0)
  328.     DPOKE INTIN,0    ! Rahmung aus
  329.     VDISYS 104
  330.     DEFFILL 1,0,0
  331.     PBOX -1,18,640,-1
  332.     HIDEM
  333.     PAUSE 10
  334.     HARDCOPY
  335.     PAUSE 10
  336.     DPOKE INTIN,1    ! Rahmung an
  337.     VDISYS 104
  338.     OPENW 0
  339.     ~MENU_BAR(menu_adr%,1)
  340.     SHOWM
  341.   ENDIF
  342. RETURN
  343. > PROCEDURE screen_dump_9_needle
  344.   MENU OFF
  345.   ALERT 1,"Switch on| printer",1," OK | NO ",reply%
  346.   IF reply%=1
  347.     CLOSEW 0
  348.     ~MENU_BAR(menu_adr%,0)
  349.     DPOKE INTIN,0    ! Rahmung aus
  350.     VDISYS 104
  351.     DEFFILL 1,0,0
  352.     PBOX -1,18,640,-1
  353.     HIDEM
  354.     PAUSE 10
  355.     @hrdcopy(0,1,1)             !nlq%,res%,n%
  356.     ' NLQ%: 0 = bidirectional
  357.     '       1 = unidirectional
  358.     ' RES%: 0 = grobe Rasterung, keine Punkteverdichtung
  359.     '       1 = Punkteverdichtung an horizontalen und vertikalen Linien
  360.     '       2 = Punkteverdichtung auch an diagonalen Linien
  361.     ' N%  : 0 = Einfacher Druck
  362.     '       1 = doppelter Druck  (für ältere Farbbänder)
  363.     '       2 = vierfacher Druck  (dauert sagenhaft lange)
  364.     PAUSE 10
  365.     DPOKE INTIN,1    ! Rahmung an
  366.     VDISYS 104
  367.     OPENW 0
  368.     ~MENU_BAR(menu_adr%,1)
  369.     SHOWM
  370.   ENDIF
  371. RETURN
  372. > PROCEDURE neues_blatt
  373.   LOCAL dummy&
  374.   ALERT 2,"   Blatt löschen und neu|   bearbeiten, oder Blatt|laden und erneut bearbeiten?",1," NEU | LADEN ",dummy&
  375.   IF dummy&=1
  376.     CLS
  377.     @bildaufbau
  378.     @default
  379.     @datum_berechnen(DATE$,datum$())
  380.     @werte_eintragen
  381.   ELSE
  382.     @datenfile_laden
  383.   ENDIF
  384. RETURN
  385. > PROCEDURE default
  386.   @def_laden
  387.   kw$=""
  388.   '
  389.   FOR i#=0 TO 6
  390.     button#(1,i#)=0
  391.     button#(2,i#)=0
  392.     button#(3,i#)=0
  393.     '
  394.     ort$(i#)=standardtext$
  395.     ort$(5)=""
  396.     ort$(6)=""
  397.     '
  398.     h_aussen#(i#)=0
  399.     '
  400.     werte#(0,i#)=0                     !gefahrene KM
  401.     werte#(1,i#)=0                     !KM-Geld
  402.     werte#(2,i#)=anfangszeit#
  403.     werte#(2,6)=0    !So
  404.     werte#(2,5)=0    !Sa
  405.     werte#(3,i#)=arbeitsende#
  406.     werte#(3,6)=0    !So
  407.     werte#(3,5)=0    !Sa
  408.     werte#(3,4)=freitagende#   !Fr
  409.     werte#(4,i#)=0                      !spesen tag
  410.     werte#(5,i#)=0                      !spesen nacht
  411.     werte#(6,i#)=0                      !spesen n. beleg
  412.     werte#(7,i#)=0                      !nebenkosten
  413.     auslandflag!(i#)=FALSE
  414.   NEXT i#
  415. RETURN
  416. > PROCEDURE ortszeile_aufteilen(i#)
  417.   LOCAL stelle1#,stelle2#
  418.   IF LEN(ort$(i#))>25
  419.     ort1$=LEFT$(ort$(i#),25)
  420.     stelle1#=RINSTR(ort1$," ")
  421.     IF stelle1#=0              !falls ohne blank
  422.       stelle1#=25
  423.     ENDIF
  424.     ort1$=LEFT$(ort$(i#),stelle1#)
  425.     '
  426.     IF LEN(RIGHT$(ort$(i#),LEN(ort$(i#))-stelle1#))>25
  427.       ort2$=MID$(ort$(i#),stelle1#+1,25)
  428.       stelle2#=RINSTR(ort2$," ")
  429.       IF stelle2#=0              !falls ohne blank
  430.         stelle2#=25
  431.       ENDIF
  432.       ort2$=LEFT$(ort2$,stelle2#)
  433.       '
  434.       slen#=LEN(ort1$)+LEN(ort2$)
  435.       IF slen#<LEN(ort$(i#))
  436.         ort3$=RIGHT$(ort$(i#),LEN(ort$(i#))-slen#)
  437.       ELSE
  438.         ort3$=""
  439.       ENDIF
  440.     ELSE
  441.       ort2$=RIGHT$(ort$(i#),LEN(ort$(i#))-stelle1#)
  442.       ort3$=""
  443.     ENDIF
  444.   ELSE
  445.     ort1$=ort$(i#)
  446.     ort2$=""
  447.     ort3$=""
  448.   ENDIF
  449. RETURN
  450. > PROCEDURE werte_eintragen
  451.   DEFTEXT 1,0,0,4
  452.   ' zurücksetzen der vertikalen summen
  453.   werte#(0,7)=0
  454.   werte#(1,7)=0
  455.   werte#(4,7)=0
  456.   werte#(5,7)=0
  457.   werte#(6,7)=0
  458.   werte#(7,7)=0
  459.   mehrarbeit#=0
  460.   '
  461.   FOR i#=0 TO 6
  462.     @berechnungen
  463.     @ortszeile_aufteilen(i#)
  464.     '
  465.     werte#(i#,8)=ROUND(werte#(1,i#)+werte#(4,i#)+werte#(5,i#)+werte#(6,i#)+werte#(7,i#),2)
  466.     '
  467.     ' löschen
  468.     TEXT 25,ybase#+10+sprung#*i#,SPACE$(25)
  469.     TEXT 25,ybase#+20+sprung#*i#,SPACE$(25)
  470.     TEXT 25,ybase#+30+sprung#*i#,SPACE$(15)
  471.     ' eintragen
  472.     TEXT 25,ybase#+10+sprung#*i#,ort1$
  473.     TEXT 25,ybase#+20+sprung#*i#,ort2$
  474.     TEXT 25,ybase#+30+sprung#*i#,ort3$
  475.     a$=STR$(werte#(0,i#),7)                    ! damit formatierung
  476.     TEXT 185,ybase#+(sprung#/2)+2+sprung#*i#,a$     ! KM
  477.     '
  478.     a$=STR$(werte#(1,i#),7,2)                    ! damit formatierung
  479.     TEXT 235,ybase#+(sprung#/2)+2+sprung#*i#,a$     !KM-DM
  480.     '
  481.     a$=STR$(werte#(2,i#),7,2)
  482.     TEXT 285,ybase#+(sprung#*0.25)+2+sprung#*i#,a$  !uhrzeit von
  483.     '
  484.     a$=STR$(h_aussen#(i#),7,2)
  485.     TEXT 285,ybase#+(sprung#*0.75)+2+sprung#*i#,a$  !zeit draußen
  486.     '
  487.     a$=STR$(werte#(3,i#),7,2)
  488.     TEXT 335,ybase#+(sprung#*0.25)+2+sprung#*i#,a$  !uhrzeit bis
  489.     '
  490.     a$=STR$(h_calc#(i#),7,2)
  491.     TEXT 335,ybase#+(sprung#*0.75)+2+sprung#*i#,a$  !berechnete arbeitszeit
  492.     '
  493.     a$=STR$(werte#(4,i#),7,2)
  494.     TEXT 385,ybase#+(sprung#/2)+2+sprung#*i#,a$     !tagesspesen
  495.     '
  496.     a$=STR$(werte#(5,i#),7,2)
  497.     TEXT 435,ybase#+(sprung#/2)+2+sprung#*i#,a$     !nachtspesen
  498.     '
  499.     a$=STR$(werte#(6,i#),7,2)
  500.     TEXT 485,ybase#+(sprung#/2)+2+sprung#*i#,a$     !spesen n. beleg
  501.     '
  502.     a$=STR$(werte#(7,i#),7,2)
  503.     TEXT 535,ybase#+(sprung#/2)+2+sprung#*i#,a$     !nebenkosten
  504.     '
  505.     a$=STR$(werte#(i#,8),7,2)
  506.     TEXT 585,ybase#+(sprung#/2)+2+sprung#*i#,a$     !horizontale summe
  507.   NEXT i#
  508.   '
  509.   ' ergebnisausgabe     vertikale summierung
  510.   FOR n#=0 TO 6
  511.     werte#(0,7)=werte#(0,7)+werte#(0,n#)        ! Km
  512.     werte#(1,7)=werte#(1,7)+werte#(1,n#)        ! KM/DM
  513.     werte#(4,7)=werte#(4,7)+werte#(4,n#)        ! tagessatz
  514.     werte#(5,7)=werte#(5,7)+werte#(5,n#)        ! nacht-betrag
  515.     werte#(6,7)=werte#(6,7)+werte#(6,n#)        ! spesen n. beleg
  516.     werte#(7,7)=werte#(7,7)+werte#(7,n#)        ! nebenkosten
  517.     mehrarbeit#=mehrarbeit#+TRUNC(h_calc#(n#))+FRAC(h_calc#(n#))*1.66666
  518.   NEXT n#
  519.   '
  520.   werte#(0,7)=ROUND(werte#(0,7),0)      ! Km
  521.   a$=STR$(werte#(0,7),7)
  522.   TEXT 185,yend#+15,a$
  523.   '
  524.   werte#(1,7)=ROUND(werte#(1,7),2)      ! Km/DM
  525.   a$=STR$(werte#(1,7),7,2)
  526.   TEXT 235,yend#+15,a$
  527.   '
  528.   mehrarbeit#=-wochenstunden#+mehrarbeit#-mittag#
  529.   mehrarbeit#=ROUND(TRUNC(mehrarbeit#)+FRAC(mehrarbeit#)*0.6,2)
  530.   IF ROUND(FRAC(mehrarbeit#),2)=0.6
  531.     mehrarbeit#=TRUNC(mehrarbeit#)+1
  532.   ENDIF
  533.   a$=STR$(mehrarbeit#,5)
  534.   TEXT 285,yend#+15,"           "
  535.   TEXT 285,yend#+15,"MEHRARB. "+a$
  536.   '
  537.   werte#(4,7)=ROUND(werte#(4,7),2)     ! tagessatz
  538.   a$=STR$(werte#(4,7),7,2)
  539.   TEXT 385,yend#+15,a$
  540.   '
  541.   werte#(5,7)=ROUND(werte#(5,7),2)     ! nacht-betrag
  542.   a$=STR$(werte#(5,7),7,2)
  543.   TEXT 435,yend#+15,a$
  544.   '
  545.   werte#(6,7)=ROUND(werte#(6,7),2)     ! spesen n. beleg
  546.   a$=STR$(werte#(6,7),7,2)
  547.   TEXT 485,yend#+15,a$
  548.   '
  549.   werte#(7,7)=ROUND(werte#(7,7),2)     ! nebenkosten
  550.   a$=STR$(werte#(7,7),7,2)
  551.   TEXT 535,yend#+15,a$
  552.   '
  553.   summeh#=ROUND(werte#(1,7)+werte#(4,7)+werte#(5,7)+werte#(6,7)+werte#(7,7),2)
  554.   a$=STR$(summeh#,7,2)
  555.   TEXT 586,yend#+15,a$
  556.   '
  557.   DEFTEXT 1,0,0,13
  558.   TEXT 420,375,"        "
  559.   TEXT 420,375,"KW : "+kw$
  560.   '
  561.   ~WIND_GET(0,10,handle&,dummy&,dummy&,dummy&)
  562.   IF handle&=0
  563.     BMOVE screen_adr%,bit_adr%,screenlen&               ! screen für ACCs saven
  564.   ENDIF
  565. RETURN
  566. > PROCEDURE editieren
  567.   LOCAL dummy!
  568.   ' ZEILE FESTLEGEN
  569.   z#=INT((y#-ybase#)/sprung#)
  570.   '
  571.   ' kleine kästchen F E M
  572.   IF y#<ybase#+sprung#*(z#+1)-5 AND y#>ybase#+sprung#*(z#+1)-15
  573.     y1#=ybase#+sprung#*(z#+1)-5
  574.     y2#=ybase#+sprung#*(z#+1)-15
  575.     IF x#>120 AND x#<130
  576.       IF button#(0,z#)=1
  577.         button#(0,z#)=0
  578.         werte#(5,z#)=0
  579.       ELSE
  580.         button#(0,z#)=1
  581.         werte#(5,z#)=nacht_pausch#
  582.       ENDIF
  583.       x1#=120
  584.       x2#=130
  585.       @markieren(x1#,y1#,x2#,y2#)
  586.       @werte_eintragen
  587.       GOTO ausgang
  588.     ENDIF
  589.     '
  590.     IF x#>140 AND x#<150
  591.       IF button#(1,z#)=1
  592.         button#(1,z#)=0
  593.       ELSE
  594.         button#(1,z#)=1
  595.       ENDIF
  596.       x1#=140
  597.       x2#=150
  598.       @markieren(x1#,y1#,x2#,y2#)
  599.       @werte_eintragen
  600.       GOTO ausgang
  601.     ENDIF
  602.     '
  603.     IF x#>160 AND x#<170
  604.       IF button#(2,z#)=1
  605.         button#(2,z#)=0
  606.       ELSE
  607.         button#(2,z#)=1
  608.       ENDIF
  609.       x1#=160
  610.       x2#=170
  611.       @markieren(x1#,y1#,x2#,y2#)
  612.       @werte_eintragen
  613.       GOTO ausgang
  614.     ENDIF
  615.     '
  616.   ENDIF
  617.   '
  618.   ' Bereich der Stringeingabe
  619.   IF y#>ybase#+sprung#*z# AND y#<ybase#+sprung#*(z#+1)
  620.     '
  621.     IF x#>20 AND x#<180
  622.       x1#=20
  623.       x2#=180
  624.       y1#=ybase#+sprung#*z#
  625.       y2#=ybase#+sprung#*(z#+1)
  626.       @markieren(x1#,y1#,x2#,y2#)
  627.       zeichen$=ort$(z#)
  628.       laenge#=47
  629.       @edit(laenge#,zeichen$)
  630.       @markieren(x1#,y1#,x2#,y2#)
  631.       ort$(z#)=back$
  632.       @werte_eintragen
  633.       GOTO ausgang
  634.     ENDIF
  635.     '
  636.     ' anzahl KM
  637.     IF x#>180 AND x#<230
  638.       x1#=180
  639.       x2#=230
  640.       y1#=ybase#+sprung#*z#
  641.       y2#=ybase#+sprung#*(z#+1)
  642.       @markieren(x1#,y1#,x2#,y2#)
  643.       zeichen$=STR$(werte#(0,z#))
  644.       laenge#=5
  645.       @edit(laenge#,zeichen$)
  646.       @markieren(x1#,y1#,x2#,y2#)
  647.       werte#(0,z#)=VAL(back$)
  648.       @werte_eintragen
  649.       GOTO ausgang
  650.     ENDIF
  651.     '
  652.     ' KM-Geld (wenn Dienstwagen, dann ja keine KM, sondern Spritgeld)
  653.     IF x#>230 AND x#<280
  654.       x1#=230
  655.       x2#=280
  656.       y1#=ybase#+sprung#*z#
  657.       y2#=ybase#+sprung#*(z#+1)
  658.       @markieren(x1#,y1#,x2#,y2#)
  659.       zeichen$=STR$(werte#(1,z#))
  660.       laenge#=5
  661.       @edit(laenge#,zeichen$)
  662.       @markieren(x1#,y1#,x2#,y2#)
  663.       werte#(1,z#)=VAL(back$)
  664.       @werte_eintragen
  665.       GOTO ausgang
  666.     ENDIF
  667.     ' Uhrzeit von
  668.     IF y#>ybase#+sprung#*z# AND y#<ybase#+sprung#*(z#+1)-sprung#/2
  669.       IF x#>280 AND x#<330
  670.         x1#=280
  671.         x2#=330
  672.         y1#=ybase#+sprung#*z#
  673.         y2#=ybase#+sprung#*(z#+1)-(sprung#/2)
  674.         @markieren(x1#,y1#,x2#,y2#)
  675.         zeichen$=STR$(werte#(2,z#))
  676.         laenge#=5
  677.         @edit(laenge#,zeichen$)
  678.         @markieren(x1#,y1#,x2#,y2#)
  679.         werte#(2,z#)=VAL(back$)
  680.         @werte_eintragen
  681.         GOTO ausgang
  682.       ENDIF
  683.     ENDIF
  684.     '
  685.     ' Aussendienststunden
  686.     IF y#>ybase#+sprung#*z#+sprung#/2 AND y#<ybase#+sprung#*(z#+1)
  687.       IF x#>280 AND x#<330
  688.         x1#=280
  689.         x2#=330
  690.         y1#=ybase#+sprung#*z#+sprung#/2
  691.         y2#=ybase#+sprung#*(z#+1)
  692.         @markieren(x1#,y1#,x2#,y2#)
  693.         zeichen$=STR$(h_aussen#(z#))
  694.         laenge#=5
  695.         @edit(laenge#,zeichen$)
  696.         @markieren(x1#,y1#,x2#,y2#)
  697.         h_aussen#(z#)=VAL(back$)
  698.         @werte_eintragen
  699.         GOTO ausgang
  700.       ENDIF
  701.     ENDIF
  702.     '
  703.     ' dienstende
  704.     IF y#>ybase#+sprung#*z# AND y#<ybase#+sprung#*(z#+1)-sprung#/2
  705.       IF x#>330 AND x#<380
  706.         x1#=330
  707.         x2#=380
  708.         y1#=ybase#+sprung#*z#
  709.         y2#=ybase#+sprung#*z#+sprung#/2        ! obere hälfte
  710.         @markieren(x1#,y1#,x2#,y2#)
  711.         zeichen$=STR$(werte#(3,z#))
  712.         laenge#=5
  713.         @edit(laenge#,zeichen$)
  714.         @markieren(x1#,y1#,x2#,y2#)
  715.         werte#(3,z#)=VAL(back$)
  716.         @werte_eintragen
  717.         GOTO ausgang
  718.       ENDIF
  719.     ENDIF
  720.     '
  721.     ' Tagesspesen
  722.     IF x#>380 AND x#<430
  723.       IF auslandflag!(z#)=TRUE    !rechte Maustaste'
  724.         x1#=380
  725.         x2#=430
  726.         y1#=ybase#+sprung#*z#
  727.         y2#=ybase#+sprung#*(z#+1)
  728.         @markieren(x1#,y1#,x2#,y2#)
  729.         '
  730.         @ausland_box
  731.         @ausland_selected(tag#,nacht#)                  ! wahl beendet -->
  732.         werte#(4,z#)=tag#
  733.         IF button#(0,z#)=1
  734.           werte#(5,z#)=nacht#
  735.         ENDIF
  736.         '
  737.         @markieren(x1#,y1#,x2#,y2#)
  738.         @werte_eintragen
  739.         '  auslandflag!=FALSE
  740.         GOTO ausgang
  741.       ENDIF
  742.     ENDIF
  743.     '
  744.     ' Nachtspesen
  745.     IF x#>430 AND x#<480 AND button#(0,z#)=1
  746.       x1#=430
  747.       x2#=480
  748.       y1#=ybase#+sprung#*z#
  749.       y2#=ybase#+sprung#*(z#+1)
  750.       @markieren(x1#,y1#,x2#,y2#)
  751.       zeichen$=STR$(werte#(5,z#))
  752.       laenge#=7
  753.       @edit(laenge#,zeichen$)
  754.       @markieren(x1#,y1#,x2#,y2#)
  755.       werte#(5,z#)=VAL(back$)
  756.       @werte_eintragen
  757.       GOTO ausgang
  758.     ENDIF
  759.     '
  760.     ' Spesen n. Beleg
  761.     IF x#>480 AND x#<530
  762.       x1#=480
  763.       x2#=530
  764.       y1#=ybase#+sprung#*z#
  765.       y2#=ybase#+sprung#*(z#+1)
  766.       @markieren(x1#,y1#,x2#,y2#)
  767.       zeichen$=STR$(werte#(6,z#))
  768.       laenge#=7
  769.       @edit(laenge#,zeichen$)
  770.       @markieren(x1#,y1#,x2#,y2#)
  771.       werte#(6,z#)=VAL(back$)
  772.       @werte_eintragen
  773.       GOTO ausgang
  774.     ENDIF
  775.     '
  776.     ' Nebenkosten
  777.     IF x#>530 AND x#<580
  778.       x1#=530
  779.       x2#=580
  780.       y1#=ybase#+sprung#*z#
  781.       y2#=ybase#+sprung#*(z#+1)
  782.       @markieren(x1#,y1#,x2#,y2#)
  783.       zeichen$=STR$(werte#(7,z#))
  784.       laenge#=7
  785.       @edit(laenge#,zeichen$)
  786.       @markieren(x1#,y1#,x2#,y2#)
  787.       werte#(7,z#)=VAL(back$)
  788.       @werte_eintragen
  789.       GOTO ausgang
  790.     ENDIF
  791.   ENDIF
  792.   '
  793. ausgang:
  794. RETURN
  795. > PROCEDURE markieren(x1#,y1#,x2#,y2#)
  796.   GRAPHMODE 3
  797.   DEFFILL 1,1,1
  798.   PBOX x1#,y1#,x2#,y2#
  799.   PAUSE 5
  800.   GRAPHMODE 1
  801. RETURN
  802. > PROCEDURE edit(laenge#,zeichen$)
  803.   IF addflag!=FALSE
  804.     PRINT AT(1,22);"EDITIEREN: ";
  805.     FORM INPUT laenge# AS zeichen$
  806.     back$=zeichen$
  807.     PRINT AT(1,22);SPACE$(59)
  808.   ENDIF
  809.   IF addflag!=TRUE
  810.     @add_feld(zeichen$)
  811.     addflag!=FALSE
  812.   ENDIF
  813. RETURN
  814. > PROCEDURE berechnungen
  815.   IF werte#(0,i#)<>0                      ! wenn km eingetragen sind (priv.pkw)
  816.     werte#(1,i#)=werte#(0,i#)*km_faktor#     ! die km-pauschale
  817.   ENDIF
  818.   '
  819.   ' umformung zeit in decimals
  820.   ' arbeitszeit= bis-von
  821.   anfang#=TRUNC(werte#(2,i#))+(FRAC(werte#(2,i#))*1.66666)
  822.   finito#=TRUNC(werte#(3,i#))+(FRAC(werte#(3,i#))*1.66666)
  823.   aussen#=TRUNC(h_aussen#(i#))+(FRAC(h_aussen#(i#))*1.66666)
  824.   '
  825.   h_calc#(i#)=finito#-anfang#                       ! berechnete arbeitszeit in dec.
  826.   h_calc#(i#)=ROUND(TRUNC(h_calc#(i#))+(FRAC(h_calc#(i#))*0.6),2)      !in min.
  827.   '
  828.   '  IF button(0,i)=1
  829.   '  werte(5,i)=nacht_pausch        ! pro übernachtung pauschalbetrag
  830.   '  IF finito>5.5 AND finito<7
  831.   '  werte(5,i)=nacht_pausch*0.3
  832.   ' ENDIF
  833.   '  IF finito>7 AND finito<10
  834.   '  werte(5,i)=nacht_pausch*0.5
  835.   ' ENDIF
  836.   '  IF finito>10 AND finito<12
  837.   '  werte(5,i)=nacht_pausch*0.8
  838.   ' ENDIF
  839.   ' IF finito>12 AND finito<24
  840.   '  werte(5,i)=nacht_pausch
  841.   ' ENDIF
  842.   ' ELSE
  843.   '  werte(5,i)=0
  844.   ' ENDIF
  845.   '
  846.   IF button#(1,i#)=1              ! abzug für frühstück
  847.     fabzug#=VAL(fabzug$)/100
  848.   ELSE
  849.     fabzug#=0
  850.   ENDIF
  851.   '
  852.   IF button#(2,i#)=1                 ! abzug für essen
  853.     eabzug#=VAL(eabzug$)/100
  854.   ELSE
  855.     eabzug#=0
  856.   ENDIF
  857.   '
  858.   IF button#(0,i#)=0 AND auslandflag!(i#)=FALSE     ! also alles für eintägig
  859.     IF aussen#>6 AND aussen#<=8
  860.       werte#(4,i#)=eintag_spesen#-25-eabzug#*eintag_spesen#-fabzug#*eintag_spesen#
  861.     ENDIF
  862.     IF aussen#>8 AND aussen#<=10
  863.       werte#(4,i#)=eintag_spesen#-18-eabzug#*eintag_spesen#-fabzug#*eintag_spesen#
  864.     ENDIF
  865.     IF aussen#>10 AND aussen#<=12
  866.       werte#(4,i#)=eintag_spesen#-7-eabzug#*eintag_spesen#-fabzug#*eintag_spesen#
  867.     ENDIF
  868.     IF aussen#>12 AND aussen#<=24
  869.       werte#(4,i#)=eintag_spesen#-eabzug#*eintag_spesen#-fabzug#*eintag_spesen#
  870.     ENDIF
  871.     IF aussen#<6               ! dann eben nix
  872.       werte#(4,i#)=0
  873.     ENDIF
  874.     IF werte#(4,i#)<0                     ! falls mal kleiner null
  875.       werte#(4,i#)=0
  876.     ENDIF
  877.   ENDIF
  878.   '
  879.   IF button#(0,i#)=1 AND auslandflag!(i#)=FALSE     ! also alles für mehrtägig
  880.     IF aussen#>6 AND aussen#<=8
  881.       werte#(4,i#)=mehrtag_spesen#-33-eabzug#*mehrtag_spesen#-fabzug#*mehrtag_spesen#
  882.     ENDIF
  883.     IF aussen#>8 AND aussen#<=10
  884.       werte#(4,i#)=mehrtag_spesen#-23-eabzug#*mehrtag_spesen#-fabzug#*mehrtag_spesen#
  885.     ENDIF
  886.     IF aussen#>10 AND aussen#<=12
  887.       werte#(4,i#)=mehrtag_spesen#-10-eabzug#*mehrtag_spesen#-fabzug#*mehrtag_spesen#
  888.     ENDIF
  889.     IF aussen#>12 AND aussen#<=24
  890.       werte#(4,i#)=mehrtag_spesen#-eabzug#*mehrtag_spesen#-fabzug#*mehrtag_spesen#
  891.     ENDIF
  892.     IF aussen#<6                       ! dann eben nix
  893.       werte#(4,i#)=0
  894.     ENDIF
  895.     IF werte#(4,i#)<0                     ! falls mal kleiner null
  896.       werte#(4,i#)=0
  897.     ENDIF
  898.   ENDIF
  899.   '
  900.   IF button#(0,i#)=0 OR button#(0,i#)=1 AND auslandflag!(i#)=TRUE
  901.     ' also alles für eintägig oder mehrtägig im ausland
  902.     IF aussen#>0 AND aussen#<=24
  903.       werte#(4,i#)=tag#-eabzug#*tag#-fabzug#*tag#
  904.     ENDIF
  905.     IF werte#(4,i#)<0                     ! falls mal kleiner null
  906.       werte#(4,i#)=0
  907.     ENDIF
  908.   ENDIF
  909. RETURN
  910. > PROCEDURE kostst
  911.   x1#=490
  912.   x2#=640
  913.   y1#=yend#+49
  914.   y2#=381
  915.   @markieren(x1#,y1#,x2#,y2#)
  916.   zeichen$=kostst$
  917.   laenge#=6
  918.   @edit(laenge#,zeichen$)
  919.   @markieren(x1#,y1#,x2#,y2#)
  920.   kostst$=back$
  921.   TEXT 500,375,"               "
  922.   TEXT 500,375,"Kostenst.: "+kostst$
  923. RETURN
  924. > PROCEDURE persnr
  925.   x1#=490
  926.   x2#=640
  927.   y1#=yend#+25
  928.   y2#=yend#+49
  929.   @markieren(x1#,y1#,x2#,y2#)
  930.   zeichen$=persnr$
  931.   laenge#=6
  932.   @edit(laenge#,zeichen$)
  933.   @markieren(x1#,y1#,x2#,y2#)
  934.   persnr$=back$
  935.   TEXT 500,352,"               "
  936.   TEXT 500,352,"Pers.nr. : "+persnr$
  937. RETURN
  938. > PROCEDURE kw
  939.   x1#=400
  940.   x2#=490
  941.   y1#=yend#+49
  942.   y2#=381
  943.   @markieren(x1#,y1#,x2#,y2#)
  944.   zeichen$=kw$
  945.   laenge#=2
  946.   @edit(laenge#,zeichen$)
  947.   @markieren(x1#,y1#,x2#,y2#)
  948.   kw$=back$
  949.   TEXT 420,375,"        "
  950.   TEXT 420,375,"KW : "+kw$
  951. RETURN
  952. > PROCEDURE nomen
  953.   x1#=160
  954.   x2#=400
  955.   y1#=yend#+49
  956.   y2#=381
  957.   @markieren(x1#,y1#,x2#,y2#)
  958.   zeichen$=nomen$
  959.   laenge#=20
  960.   @edit(laenge#,zeichen$)
  961.   @markieren(x1#,y1#,x2#,y2#)
  962.   nomen$=back$
  963.   TEXT 170,375,SPACE$(28)
  964.   TEXT 170,375,"Name : "+nomen$
  965. RETURN
  966. > PROCEDURE menue_init
  967.   LET menue&=2 !RSC_TREE
  968.   LET crmess&=10 !Obj in #2
  969.   LET newpage&=19 !Obj in #2
  970.   LET initdata&=21 !Obj in #2
  971.   LET mondayte&=22 !Obj in #2
  972.   LET hrdcpy&=24 !Obj in #2
  973.   LET lister&=25 !Obj in #2
  974.   LET formular&=26 !Obj in #2
  975.   LET statist&=28 !Obj in #2
  976.   LET datfile&=29 !Obj in #2
  977.   LET gomonat&=31 !Obj in #2
  978.   LET menufin&=33 !Obj in #2
  979.   ~RSRC_GADDR(0,menue&,menu_adr%)
  980.   ~MENU_BAR(menu_adr%,1)
  981. RETURN
  982. > PROCEDURE add_feld(zeichen$)
  983.   LOCAL redraw$,tree1%,summ#
  984.   FOR i|=0 TO 10                                ! tree1|(0) = RSC_TREE #0
  985.     '                                           ! tree1|(1) = Name     in Obj #0
  986.     tree1|(i|)=i|                               ! tree1|(2) = ed-feld1 in Obj #0
  987.     '                                           ! tree1|(3) = ed-feld2 in Obj #0
  988.     '                                           ! tree1|(4) = ed-feld3 in Obj #0
  989.     '                                           ! tree1|(5) = ed-feld4 in Obj #0
  990.     '                                           ! tree1|(6) = ed-feld5 in Obj #0
  991.     '                                           ! tree1|(7) = ok-button #0
  992.     '                                           ! tree1|(8) = cancel-button #0
  993.   NEXT i|
  994.   '
  995.   ~RSRC_GADDR(0,tree1|(0),tree1%)
  996.   ~FORM_CENTER(tree1%,x&,y&,w&,h&)
  997.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$ !redraw vorbereiten
  998.   '
  999.   FOR i|=2 TO 6                         ! von 2 -6 liegen die editfelder
  1000.     CHAR{{OB_SPEC(tree1%,tree1|(i|))}}=""
  1001.   NEXT i|
  1002.   '
  1003.   ~OBJC_DRAW(tree1%,0,7,x&,y&,w&,h&)
  1004.   a%=FORM_DO(tree1%,0)
  1005.   SELECT BCLR(a%,15)   !ohne doppelclick
  1006.   CASE 7
  1007.     FOR i|=2 TO 6                         ! von 2 -6 liegen die editfelder
  1008.       n$=CHAR{{OB_SPEC(tree1%,tree1|(i|))}}
  1009.       summ#=summ#+VAL(n$)
  1010.       back$=STR$(summ#)
  1011.     NEXT i|
  1012.     OB_STATE(tree1%,7)=BCLR(OB_STATE(tree1%,7),0)
  1013.   CASE 8
  1014.     FOR i|=2 TO 6                         ! von 2 -6 liegen die editfelder
  1015.       back$=zeichen$
  1016.     NEXT i|
  1017.     OB_STATE(tree1%,8)=BCLR(OB_STATE(tree1%,8),0)
  1018.   ENDSELECT
  1019.   PUT x&-4,y&-4,redraw$         ! redraw
  1020. RETURN
  1021. > PROCEDURE definition_feld
  1022.   LOCAL redraw$,tree2%
  1023.   FOR i|=1 TO 25                                ! tree2|(1) = RSC_TREE #1
  1024.     '                                           ! tree2|(1) = Name     in Obj #1
  1025.     tree2|(i|)=i|                               ! tree2|(2) = std_text in Obj #1
  1026.     '                                           ! tree2|(3) = km/dm    in Obj #1
  1027.     '                                           ! tree2|(4) = 1t_reise in Obj #1
  1028.     '                                           ! tree2|(5) = mt_reise in Obj #1
  1029.     '                                           ! tree2|(6) = nacht_p  in Obj #1
  1030.     '                                           ! tree2|(7)= ang_name in Obj #1
  1031.     '                                           ! tree2|(8)= kostst   in Obj #1
  1032.     '                                           ! tree2|(9)= persnr   in Obj #1
  1033.     '                                           ! tree2|(10) = arbeitbeginn   #1
  1034.     '                                           ! tree2|(11) = arbeitsende    #1
  1035.     '                                           ! tree2|(12) = h_woche in Obj #1
  1036.     '                                           ! tree2|(13)= save-button     #1
  1037.     '                                           ! tree2|(14)= OK-button       #1
  1038.     '                                           ! tree2|(15)= cancel          #1
  1039.     '                                           ! tree2|(16)= eabzug          #1
  1040.     '                                           ! tree2|(17)= fabzug          #1
  1041.     '                                           ! tree2|(18)= freitagende     #1
  1042.   NEXT i|
  1043.   '
  1044.   ~RSRC_GADDR(0,tree2|(1),tree2%)
  1045.   ~FORM_CENTER(tree2%,x&,y&,w&,h&)
  1046.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$ !redraw vorbereiten
  1047.   '
  1048.   CHAR{{OB_SPEC(tree2%,tree2|(2))}}=standardtext$
  1049.   CHAR{{OB_SPEC(tree2%,tree2|(3))}}=km_faktor$
  1050.   CHAR{{OB_SPEC(tree2%,tree2|(4))}}=eintag_spesen$
  1051.   CHAR{{OB_SPEC(tree2%,tree2|(5))}}=mehrtag_spesen$
  1052.   CHAR{{OB_SPEC(tree2%,tree2|(6))}}=nacht_pausch$
  1053.   CHAR{{OB_SPEC(tree2%,tree2|(7))}}=nomen$
  1054.   CHAR{{OB_SPEC(tree2%,tree2|(8))}}=kostst$
  1055.   CHAR{{OB_SPEC(tree2%,tree2|(9))}}=persnr$
  1056.   CHAR{{OB_SPEC(tree2%,tree2|(10))}}=anfangszeit$
  1057.   CHAR{{OB_SPEC(tree2%,tree2|(11))}}=arbeitsende$
  1058.   CHAR{{OB_SPEC(tree2%,tree2|(12))}}=wochenstunden$
  1059.   CHAR{{OB_SPEC(tree2%,tree2|(16))}}=eabzug$
  1060.   CHAR{{OB_SPEC(tree2%,tree2|(17))}}=fabzug$
  1061.   CHAR{{OB_SPEC(tree2%,tree2|(18))}}=freitagende$
  1062.   '
  1063.   ~OBJC_DRAW(tree2%,0,15,x&,y&,w&,h&)
  1064.   a%=FORM_DO(tree2%,0)
  1065.   SELECT BCLR(a%,15)   !ohne doppelclick
  1066.   CASE 13               !save
  1067.     standardtext$=CHAR{{OB_SPEC(tree2%,tree2|(2))}}
  1068.     km_faktor$=CHAR{{OB_SPEC(tree2%,tree2|(3))}}
  1069.     eintag_spesen$=CHAR{{OB_SPEC(tree2%,tree2|(4))}}
  1070.     mehrtag_spesen$=CHAR{{OB_SPEC(tree2%,tree2|(5))}}
  1071.     nacht_pausch$=CHAR{{OB_SPEC(tree2%,tree2|(6))}}
  1072.     nomen$=CHAR{{OB_SPEC(tree2%,tree2|(7))}}
  1073.     kostst$=CHAR{{OB_SPEC(tree2%,tree2|(8))}}
  1074.     persnr$=CHAR{{OB_SPEC(tree2%,tree2|(9))}}
  1075.     anfangszeit$=CHAR{{OB_SPEC(tree2%,tree2|(10))}}
  1076.     arbeitsende$=CHAR{{OB_SPEC(tree2%,tree2|(11))}}
  1077.     wochenstunden$=CHAR{{OB_SPEC(tree2%,tree2|(12))}}
  1078.     fabzug$=CHAR{{OB_SPEC(tree2%,tree2|(16))}}
  1079.     eabzug$=CHAR{{OB_SPEC(tree2%,tree2|(17))}}
  1080.     freitagende$=CHAR{{OB_SPEC(tree2%,tree2|(18))}}
  1081.     @def_speichern
  1082.     @def_uebernehmen
  1083.     OB_STATE(tree2%,13)=BCLR(OB_STATE(tree2%,13),0)
  1084.   CASE 14               ! OK
  1085.     standardtext$=CHAR{{OB_SPEC(tree2%,tree2|(2))}}
  1086.     km_faktor$=CHAR{{OB_SPEC(tree2%,tree2|(3))}}
  1087.     eintag_spesen$=CHAR{{OB_SPEC(tree2%,tree2|(4))}}
  1088.     mehrtag_spesen$=CHAR{{OB_SPEC(tree2%,tree2|(5))}}
  1089.     nacht_pausch$=CHAR{{OB_SPEC(tree2%,tree2|(6))}}
  1090.     nomen$=CHAR{{OB_SPEC(tree2%,tree2|(7))}}
  1091.     kostst$=CHAR{{OB_SPEC(tree2%,tree2|(8))}}
  1092.     persnr$=CHAR{{OB_SPEC(tree2%,tree2|(9))}}
  1093.     anfangszeit$=CHAR{{OB_SPEC(tree2%,tree2|(10))}}
  1094.     arbeitsende$=CHAR{{OB_SPEC(tree2%,tree2|(11))}}
  1095.     wochenstunden$=CHAR{{OB_SPEC(tree2%,tree2|(12))}}
  1096.     fabzug$=CHAR{{OB_SPEC(tree2%,tree2|(16))}}
  1097.     eabzug$=CHAR{{OB_SPEC(tree2%,tree2|(17))}}
  1098.     freitagende$=CHAR{{OB_SPEC(tree2%,tree2|(18))}}
  1099.     @def_uebernehmen
  1100.     OB_STATE(tree2%,14)=BCLR(OB_STATE(tree2%,14),0)
  1101.   CASE 15               ! cancel
  1102.     @def_laden
  1103.     OB_STATE(tree2%,15)=BCLR(OB_STATE(tree2%,15),0)
  1104.   ENDSELECT
  1105.   PUT x&-4,y&-4,redraw$         ! redraw
  1106.   '
  1107.   @werte_eintragen
  1108. RETURN
  1109. > PROCEDURE def_laden                     ! defaultparameter laden
  1110.   IF EXIST(pfad$+"SPESEN.DEF")
  1111.     OPEN "I",#1,pfad$+"SPESEN.DEF"            ! wenn im irgendwann neue dir
  1112.   ELSE                                        ! so ein file, dann laden, wenn
  1113.     OPEN "I",#1,"SPESEN.DEF"                  ! nicht, dann aus home.dir
  1114.   ENDIF
  1115.   LINE INPUT #1,standardtext$
  1116.   LINE INPUT #1,km_faktor$
  1117.   LINE INPUT #1,eintag_spesen$
  1118.   LINE INPUT #1,mehrtag_spesen$
  1119.   LINE INPUT #1,nacht_pausch$
  1120.   LINE INPUT #1,anfangszeit$
  1121.   LINE INPUT #1,arbeitsende$
  1122.   LINE INPUT #1,freitagende$
  1123.   LINE INPUT #1,wochenstunden$
  1124.   LINE INPUT #1,nomen$
  1125.   LINE INPUT #1,persnr$
  1126.   LINE INPUT #1,kostst$
  1127.   LINE INPUT #1,eabzug$
  1128.   LINE INPUT #1,fabzug$
  1129.   CLOSE #1
  1130.   '
  1131.   @def_uebernehmen
  1132. RETURN
  1133. > PROCEDURE def_speichern                 ! defaultparameter saven
  1134.   IF EXIST(pfad$+"SPESEN.DEF")
  1135.     OPEN "O",#1,pfad$+"SPESEN.DEF"            ! wenn im irgendwann neuen dir
  1136.   ELSE                                        ! so ein file, dann da saven, wenn
  1137.     OPEN "O",#1,"SPESEN.DEF"                  ! nicht, dann im home.dir
  1138.   ENDIF
  1139.   PRINT #1,standardtext$
  1140.   PRINT #1,km_faktor$
  1141.   PRINT #1,eintag_spesen$
  1142.   PRINT #1,mehrtag_spesen$
  1143.   PRINT #1,nacht_pausch$
  1144.   PRINT #1,anfangszeit$
  1145.   PRINT #1,arbeitsende$
  1146.   PRINT #1,freitagende$
  1147.   PRINT #1,wochenstunden$
  1148.   PRINT #1,nomen$
  1149.   PRINT #1,persnr$
  1150.   PRINT #1,kostst$
  1151.   PRINT #1,fabzug$
  1152.   PRINT #1,eabzug$
  1153.   CLOSE #1
  1154. RETURN
  1155. > PROCEDURE def_uebernehmen
  1156.   km_faktor#=VAL(km_faktor$)             ! übertrag in numerische var's
  1157.   eintag_spesen#=VAL(eintag_spesen$)
  1158.   eintag_spesen#=VAL(eintag_spesen$)
  1159.   mehrtag_spesen#=VAL(mehrtag_spesen$)
  1160.   nacht_pausch#=VAL(nacht_pausch$)
  1161.   anfangszeit#=VAL(anfangszeit$)
  1162.   arbeitsende#=VAL(arbeitsende$)
  1163.   freitagende#=VAL(freitagende$)
  1164.   wochenstunden#=VAL(wochenstunden$)
  1165.   wochenstunden#=TRUNC(wochenstunden#)+ROUND(FRAC(wochenstunden#)*1.66666,1)
  1166.   TEXT 500,352,"Pers.nr. : "+SPACE$(4)
  1167.   TEXT 500,375,"Kostenst.: "+SPACE$(4)
  1168.   TEXT 170,375,"Name : "+SPACE$(19)
  1169.   TEXT 500,352,"Pers.nr. : "+persnr$
  1170.   TEXT 500,375,"Kostenst.: "+kostst$
  1171.   TEXT 420,375,"KW : "+kw$
  1172.   TEXT 170,375,"Name : "+nomen$
  1173. RETURN
  1174. > PROCEDURE hrdcopy(nlq%,res%,n%)
  1175.   ' NLQ%: 0 = bidirectional
  1176.   '       1 = unidirectional
  1177.   ' RES%: 0 = grobe Rasterung, keine Punkteverdichtung
  1178.   '       1 = Punkteverdichtung an horizontalen und vertikalen Linien
  1179.   '       2 = Punkteverdichtung auch an diagonalen Linien
  1180.   ' N%  : 0 = Einfacher Druck
  1181.   '       1 = doppelter Druck  (für ältere Farbbänder)
  1182.   '       2 = vierfacher Druck  (dauert sagenhaft lange)
  1183.   '
  1184.   '
  1185.   ARRAYFILL zeile1&(),0
  1186.   ARRAYFILL zeile2&(),0
  1187.   '
  1188.   LOCAL taste$,dummy%
  1189.   IF nlq%=0
  1190.     @def_prn(0)
  1191.   ELSE
  1192.     @def_prn(1)
  1193.   ENDIF
  1194.   @def_prn(2)
  1195.   '
  1196.   FOR s&=0 TO 1599+120                      ! eine leerzeile da öfters schrott
  1197.     LPRINT CHR$(0);                         ! in der ersten zeile
  1198.   NEXT s&
  1199.   '
  1200.   FOR s&=0 TO 639 STEP 8
  1201.     was_da%=0
  1202.     FOR i&=399 DOWNTO 0
  1203.       wert&=PTST(s&,i&)*seq#(6,2)
  1204.       ADD zeile1&(4*i&),wert&
  1205.       ADD was_da%,wert&
  1206.       IF wert&>0
  1207.         @skip(wert&,0)            !(Wert%,Nadel%)
  1208.       ENDIF
  1209.       '
  1210.       wert&=PTST(s&+1,i&)*seq#(6,3)
  1211.       ADD zeile1&(4*i&),wert&
  1212.       ADD was_da%,wert&
  1213.       IF wert&>0
  1214.         @skip(wert&,1)            !(Wert%,Nadel%)
  1215.       ENDIF
  1216.       '
  1217.       wert&=PTST(s&+2,i&)*seq#(6,4)
  1218.       ADD zeile1&(4*i&),wert&
  1219.       ADD was_da%,wert&
  1220.       IF wert&>0
  1221.         @skip(wert&,2)            !(Wert%,Nadel%)
  1222.       ENDIF
  1223.       '
  1224.       wert&=PTST(s&+3,i&)*seq#(6,5)
  1225.       ADD zeile1&(4*i&),wert&
  1226.       ADD was_da%,wert&
  1227.       IF wert&>0
  1228.         @skip(wert&,3)            !(Wert%,Nadel%)
  1229.       ENDIF
  1230.       '
  1231.       wert&=PTST(s&+4,i&)*seq#(6,6)
  1232.       ADD zeile1&(4*i&),wert&
  1233.       ADD was_da%,wert&
  1234.       IF wert&>0
  1235.         @skip(wert&,4)            !(Wert%,Nadel%)
  1236.       ENDIF
  1237.       '
  1238.       wert&=PTST(s&+5,i&)*seq#(6,7)
  1239.       ADD zeile1&(4*i&),wert&
  1240.       ADD was_da%,wert&
  1241.       IF wert&>0
  1242.         @skip(wert&,5)            !(Wert%,Nadel%)
  1243.       ENDIF
  1244.       '
  1245.       wert&=PTST(s&+6,i&)*seq#(6,8)
  1246.       ADD zeile1&(4*i&),wert&
  1247.       ADD was_da%,wert&
  1248.       IF wert&>0
  1249.         @skip(wert&,6)            !(Wert%,Nadel%)
  1250.       ENDIF
  1251.       '
  1252.       wert&=PTST(s&+7,i&)*seq#(6,9)
  1253.       ADD zeile1&(4*i&),wert&
  1254.       ADD was_da%,wert&
  1255.       IF wert&>0
  1256.         @skip(wert&,7)            !(Wert%,Nadel%)
  1257.       ENDIF
  1258.       '
  1259.       ' Abbruchbedingung:
  1260.       taste$=INKEY$
  1261.       IF taste$=CHR$(27)
  1262.         ALERT 2," STOP or GO ON",2,"STOP|GO ON",dummy%
  1263.       ENDIF
  1264.       IF dummy%=1     ! i&=0 : zeilenschleife ENDE
  1265.         i&=0
  1266.       ENDIF
  1267.     NEXT i&
  1268.     '
  1269.     IF res%=0 OR was_da%=0
  1270.       @def_prn(3)
  1271.       LPRINT
  1272.     ELSE
  1273.       @def_prn(4)
  1274.       LPRINT
  1275.     ENDIF
  1276.     IF was_da%>0
  1277.       FOR z%=0 TO 2^n%-1
  1278.         @def_prn(2)
  1279.         '
  1280.         FOR i&=1 TO 120          ! RAND
  1281.           LPRINT CHR$(0);
  1282.         NEXT i&
  1283.         FOR i&=1599 TO 0 STEP -1
  1284.           LPRINT CHR$(zeile1&(i&));
  1285.         NEXT i&
  1286.         '
  1287.         LPRINT CHR$(13);
  1288.       NEXT z%
  1289.       '
  1290.       IF res%>0
  1291.         @def_prn(5)
  1292.         LPRINT
  1293.         FOR z%=0 TO 2^n%-1
  1294.           @def_prn(2)
  1295.           '
  1296.           FOR i&=1 TO 120          ! RAND
  1297.             LPRINT CHR$(0);
  1298.           NEXT i&
  1299.           FOR i&=1599 TO 0 STEP -1
  1300.             LPRINT CHR$(zeile2&(i&));
  1301.           NEXT i&
  1302.           '
  1303.           LPRINT CHR$(13);
  1304.         NEXT z%
  1305.       ENDIF
  1306.     ENDIF
  1307.     '
  1308.     ARRAYFILL zeile1&(),0
  1309.     ARRAYFILL zeile2&(),0
  1310.     IF dummy%=1     ! s&=639 : spaltenschleife ENDE
  1311.       s&=639
  1312.     ENDIF
  1313.   NEXT s&
  1314.   '
  1315.   LPRINT CHR$(12)    !FF
  1316.   '  ERASE zeile1&(),zeile2&()                ! beide zeilen weg!!
  1317. RETURN
  1318. > PROCEDURE skip(wert&,nadel|)
  1319.   IF res%>0
  1320.     IF wert&+PTST(s&+nadel|,i&-1)=(128/2^nadel|)+1     ! rechts noch einer?
  1321.       ADD zeile1&(4*i&-2),wert&
  1322.     ENDIF
  1323.     IF wert&+PTST(s&+nadel|+1,i&)=(128/2^nadel|)+1     ! drunter noch einer?
  1324.       ADD zeile2&(4*i&),wert&
  1325.     ENDIF
  1326.     IF res%>1
  1327.       IF wert&+PTST(s&+nadel|+1,i&-1)=(128/2^nadel|)+1  ! rechts drunter einer?
  1328.         ADD zeile2&(4*i&-2),wert&
  1329.       ENDIF
  1330.       IF wert&+PTST(s&+nadel|+1,i&+1)=(128/2^nadel|)+1  ! links drunter einer?
  1331.         ADD zeile2&(4*i&+2),wert&
  1332.       ENDIF
  1333.     ENDIF
  1334.   ENDIF
  1335. RETURN
  1336. > PROCEDURE def_prn(index#)
  1337.   LOCAL z#,s#
  1338.   z#=index#
  1339.   FOR s#=2 TO seq#(z#,1)+1
  1340.     LPRINT CHR$(seq#(z#,s#));
  1341.   NEXT s#
  1342. RETURN
  1343. > PROCEDURE def_read                      ! drucker_def für hardcopy-spezial
  1344.   seq#(0,0)=1
  1345.   seq#(0,1)=3
  1346.   seq#(0,2)=27
  1347.   seq#(0,3)=85
  1348.   seq#(0,4)=0
  1349.   seq#(1,0)=2
  1350.   seq#(1,1)=3
  1351.   seq#(1,2)=27
  1352.   seq#(1,3)=85
  1353.   seq#(1,4)=1
  1354.   seq#(2,0)=3
  1355.   seq#(2,1)=4
  1356.   seq#(2,2)=27
  1357.   seq#(2,3)=90
  1358.   seq#(2,4)=184
  1359.   seq#(2,5)=6
  1360.   seq#(3,0)=4
  1361.   seq#(3,1)=3
  1362.   seq#(3,2)=27
  1363.   seq#(3,3)=51
  1364.   seq#(3,4)=23
  1365.   seq#(4,0)=5
  1366.   seq#(4,1)=3
  1367.   seq#(4,2)=27
  1368.   seq#(4,3)=51
  1369.   seq#(4,4)=21
  1370.   seq#(5,0)=6
  1371.   seq#(5,1)=3
  1372.   seq#(5,2)=27
  1373.   seq#(5,3)=51
  1374.   seq#(5,4)=2
  1375.   seq#(6,0)=7
  1376.   seq#(6,1)=8
  1377.   seq#(6,2)=128
  1378.   seq#(6,3)=64
  1379.   seq#(6,4)=32
  1380.   seq#(6,5)=16
  1381.   seq#(6,6)=8
  1382.   seq#(6,7)=4
  1383.   seq#(6,8)=2
  1384.   seq#(6,9)=1
  1385. RETURN
  1386. > PROCEDURE messagebox
  1387.   LOCAL redraw$,cmessage_adr%
  1388.   '
  1389.   LET cmessage&=3 !RSC_TREE
  1390.   LET boxname&=2 !Obj in #3
  1391.   LET zeile1&=4 !Obj in #3
  1392.   LET zeile2&=5 !Obj in #3
  1393.   LET zeile3&=6 !Obj in #3
  1394.   LET zeile4&=7 !Obj in #3
  1395.   LET zeile5&=8 !Obj in #3
  1396.   LET okbutton&=9 !Obj in #3
  1397.   LET zeile6&=10 !Obj in #3
  1398.   LET version&=11 !Obj in #3
  1399.   '
  1400.   ~RSRC_GADDR(0,cmessage&,cmessage_adr%)                ! adresse zuweisen
  1401.   ~FORM_CENTER(cmessage_adr%,x&,y&,w&,h&)               ! ausdehnung holen
  1402.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$                 ! redraw vorbereiten
  1403.   '
  1404.   CHAR{{OB_SPEC(cmessage_adr%,version&)}}=version$      ! version einsetzen
  1405.   ~OBJC_DRAW(cmessage_adr%,0,7,x&,y&,w&,h&)             ! zeichnen
  1406.   ~FORM_DO(cmessage_adr%,0)                             ! OK-button abwarten
  1407.   OB_STATE(cmessage_adr%,9)=BCLR(OB_STATE(cmessage_adr%,9),0) ! ok-button AUS
  1408.   PUT x&-4,y&-4,redraw$                                 ! redraw
  1409. RETURN
  1410. > PROCEDURE datenfile_laden
  1411.   LOCAL filename$,stelle1|,stelle2|,a|
  1412.   FILESELECT pfad$+"*.kw",kw$+".kw",filename$
  1413.   IF filename$<>"" AND filename$<>pfad$
  1414.     a|=RINSTR(filename$,"\")
  1415.     pfad$=LEFT$(filename$,a|)                   ! pfad für alle neu
  1416.     '
  1417.     CLS
  1418.     @bildaufbau
  1419.     @default                            !blatt neu initialisieren
  1420.     IF EXIST(filename$)
  1421.       OPEN "I",#1,filename$
  1422.       '
  1423.       FOR i|=0 TO 6                 !i| = zeilenschleife
  1424.         FOR z|=0 TO 7               !z| = spaltenschleife
  1425.           INPUT #1,werte#(z|,i|)
  1426.         NEXT z|
  1427.         INPUT #1,ort$(i|)
  1428.         INPUT #1,h_aussen#(i|)
  1429.         INPUT #1,h_calc#(i|)
  1430.         FOR z|=0 TO 2               !z| = hier buttonschleife / tag
  1431.           INPUT #1,button#(z|,i|)
  1432.         NEXT z|
  1433.         @buttons_nachzeichnen(i|)
  1434.       NEXT i|
  1435.       CLOSE #1
  1436.       stelle1|=RINSTR(filename$,"\")+1
  1437.       stelle2|=RINSTR(filename$,".")
  1438.       kw$=MID$(filename$,stelle1|,stelle2|-stelle1|)
  1439.       IF MID$(ort$(i|),3,1)="." AND MID$(ort$(i|),6,1)="."
  1440.         ort$(i|)=ort$(i|)
  1441.       ENDIF
  1442.     ENDIF
  1443.     @def_laden
  1444.     @werte_eintragen
  1445.   ENDIF
  1446. RETURN
  1447. > PROCEDURE datenfile_speichern
  1448.   LOCAL filename$,a|
  1449.   FILESELECT pfad$+"*.kw",kw$+".kw",filename$
  1450.   IF filename$<>"" AND filename$<>pfad$
  1451.     a|=RINSTR(filename$,"\")
  1452.     pfad$=LEFT$(filename$,a|)           ! pfad für alle neu
  1453.     '
  1454.     OPEN "O",#1,filename$
  1455.     '
  1456.     FOR i|=0 TO 6                 !i| = zeilenschleife
  1457.       FOR z|=0 TO 7               !z| = spaltenschleife
  1458.         WRITE #1,werte#(z|,i|)
  1459.       NEXT z|
  1460.       WRITE #1,ort$(i|)
  1461.       WRITE #1,h_aussen#(i|)
  1462.       WRITE #1,h_calc#(i|)
  1463.       FOR z|=0 TO 2               !z| = hier buttonschleife / tag
  1464.         WRITE #1,button#(z|,i|)
  1465.       NEXT z|
  1466.     NEXT i|
  1467.     CLOSE #1
  1468.   ENDIF
  1469. RETURN
  1470. > PROCEDURE buttons_nachzeichnen(i|)              ! wird gebraucht, wenn
  1471.   y1#=ybase#+sprung#*(i|+1)-5                      ! file geladen wird...
  1472.   y2#=ybase#+sprung#*(i|+1)-15                     ! zum einzeichnen der buttons
  1473.   IF button#(0,i|)=1
  1474.     @markieren(120,y1#,130,y2#)
  1475.   ENDIF
  1476.   IF button#(1,i|)=1
  1477.     @markieren(140,y1#,150,y2#)
  1478.   ENDIF
  1479.   IF button#(2,i|)=1
  1480.     @markieren(160,y1#,170,y2#)
  1481.   ENDIF
  1482. RETURN
  1483. > PROCEDURE formular
  1484.   LOCAL redraw$,form_adr%
  1485.   LET drucken&=4 !RSC_TREE
  1486.   LET printyes&=17 !Obj in #4
  1487.   LET printno&=18 !Obj in #4
  1488.   '
  1489.   ~RSRC_GADDR(0,drucken&,form_adr%)                ! adresse zuweisen
  1490.   ~FORM_CENTER(form_adr%,x&,y&,w&,h&)               ! ausdehnung holen
  1491.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$                 !redraw vorbereiten
  1492.   '
  1493.   ~OBJC_DRAW(form_adr%,0,7,x&,y&,w&,h&)             ! zeichnen
  1494.   a%=FORM_DO(form_adr%,0)                             ! OK-button abwarten
  1495.   SELECT BCLR(a%,15)   !ohne doppelclick
  1496.   CASE printyes&                                       ! OK-FELD
  1497.     woche!=TRUE
  1498.     @auf_formular_drucken
  1499.     OB_STATE(form_adr%,printyes&)=BCLR(OB_STATE(form_adr%,printyes&),0) !ok-feld aus
  1500.   CASE printno&
  1501.     OB_STATE(form_adr%,printno&)=BCLR(OB_STATE(form_adr%,printno&),0) !cancel-feld aus
  1502.   ENDSELECT
  1503.   PUT x&-4,y&-4,redraw$                                 ! redraw
  1504. RETURN
  1505. > PROCEDURE liste_drucken
  1506.   LOCAL dummy|
  1507.   IF OUT?(0)=TRUE
  1508.     ALERT 2,"Ausgabe auf Drucker ??",1," JA| NEIN ",dummy|
  1509.     IF dummy|=1
  1510.       LPRINT "Name : ";nomen$
  1511.       LPRINT "Personalnummer : ";persnr$
  1512.       LPRINT "Kostenstelle   : ";kostst$
  1513.       LPRINT "Kalenderwoche  : ";kw$;" von ";datum$(0);" bis ";datum$(6)
  1514.       LPRINT
  1515.       LPRINT
  1516.       LPRINT "Tag| KM | KM-DM |M|F|E| VON | OUT | BIS | TAGSP |NACHTSP|n.BELEG|NEBENKO| SUMME"
  1517.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1518.       LPRINT CHR$(13)
  1519.       LPRINT "Mo |";werte#(0,0);TAB(8);"|";werte#(1,0);TAB(16);"|";button#(0,0);
  1520.       LPRINT TAB(18);"|";button#(1,0);TAB(20);"|";button#(2,0);"|";werte#(2,0);TAB(28);"|";
  1521.       LPRINT h_aussen#(0);TAB(34);"|";werte#(3,0);TAB(40);"|";werte#(4,0);
  1522.       LPRINT TAB(48);"|";werte#(5,0);TAB(56);"|";werte#(6,0);TAB(64);"|";werte#(7,0);TAB(72);"|";werte#(0,8);
  1523.       LPRINT CHR$(13)
  1524.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1525.       LPRINT CHR$(13)
  1526.       LPRINT "Di |";werte#(0,1);TAB(8);"|";werte#(1,1);TAB(16);"|";button#(0,1);
  1527.       LPRINT TAB(18);"|";button#(1,1);TAB(20);"|";button#(2,1);"|";werte#(2,1);TAB(28);"|";
  1528.       LPRINT h_aussen#(1);TAB(34);"|";werte#(3,1);TAB(40);"|";werte#(4,1);
  1529.       LPRINT TAB(48);"|";werte#(5,1);TAB(56);"|";werte#(6,1);TAB(64);"|";werte#(7,1);TAB(72);"|";werte#(1,8);
  1530.       LPRINT CHR$(13)
  1531.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1532.       LPRINT CHR$(13)
  1533.       LPRINT "Mi |";werte#(0,2);TAB(8);"|";werte#(1,2);TAB(16);"|";button#(0,2);
  1534.       LPRINT TAB(18);"|";button#(1,2);TAB(20);"|";button#(2,2);"|";werte#(2,2);TAB(28);"|";
  1535.       LPRINT h_aussen#(2);TAB(34);"|";werte#(3,2);TAB(40);"|";werte#(4,2);
  1536.       LPRINT TAB(48);"|";werte#(5,2);TAB(56);"|";werte#(6,2);TAB(64);"|";werte#(7,2);TAB(72);"|";werte#(2,8);
  1537.       LPRINT CHR$(13)
  1538.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1539.       LPRINT CHR$(13)
  1540.       LPRINT "Do |";werte#(0,3);TAB(8);"|";werte#(1,3);TAB(16);"|";button#(0,3);
  1541.       LPRINT TAB(18);"|";button#(1,3);TAB(20);"|";button#(2,3);"|";werte#(2,3);TAB(28);"|";
  1542.       LPRINT h_aussen#(3);TAB(34);"|";werte#(3,3);TAB(40);"|";werte#(4,3);
  1543.       LPRINT TAB(48);"|";werte#(5,3);TAB(56);"|";werte#(6,3);TAB(64);"|";werte#(7,3);TAB(72);"|";werte#(3,8);
  1544.       LPRINT CHR$(13)
  1545.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1546.       LPRINT CHR$(13)
  1547.       LPRINT "Fr |";werte#(0,4);TAB(8);"|";werte#(1,4);TAB(16);"|";button#(0,4);
  1548.       LPRINT TAB(18);"|";button#(1,4);TAB(20);"|";button#(2,4);"|";werte#(2,4);TAB(28);"|";
  1549.       LPRINT h_aussen#(4);TAB(34);"|";werte#(3,4);TAB(40);"|";werte#(4,4);
  1550.       LPRINT TAB(48);"|";werte#(5,4);TAB(56);"|";werte#(6,4);TAB(64);"|";werte#(7,4);TAB(72);"|";werte#(4,8);
  1551.       LPRINT CHR$(13)
  1552.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1553.       LPRINT CHR$(13)
  1554.       LPRINT "Sa |";werte#(0,5);TAB(8);"|";werte#(1,5);TAB(16);"|";button#(0,5);
  1555.       LPRINT TAB(18);"|";button#(1,5);TAB(20);"|";button#(2,5);"|";werte#(2,5);TAB(28);"|";
  1556.       LPRINT h_aussen#(5);TAB(34);"|";werte#(3,5);TAB(40);"|";werte#(4,5);
  1557.       LPRINT TAB(48);"|";werte#(5,5);TAB(56);"|";werte#(6,5);TAB(64);"|";werte#(7,5);TAB(72);"|";werte#(5,8);
  1558.       LPRINT CHR$(13)
  1559.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1560.       LPRINT CHR$(13)
  1561.       LPRINT "So |";werte#(0,6);TAB(8);"|";werte#(1,6);TAB(16);"|";button#(0,6);
  1562.       LPRINT TAB(18);"|";button#(1,6);TAB(20);"|";button#(2,6);"|";werte#(2,6);TAB(28);"|";
  1563.       LPRINT h_aussen#(6);TAB(34);"|";werte#(3,6);TAB(40);"|";werte#(4,6);
  1564.       LPRINT TAB(48);"|";werte#(5,6);TAB(56);"|";werte#(6,6);TAB(64);"|";werte#(7,6);TAB(72);"|";werte#(6,8);
  1565.       LPRINT CHR$(13)
  1566.       LPRINT "---+----+-------+-+-+-+-----+-----+-----+-------+-------+-------+-------+-------";
  1567.       LPRINT CHR$(13)
  1568.       LPRINT CHR$(228);"  |";werte#(0,7);TAB(8);"|";werte#(1,7);TAB(16);"| Mehrarbeit: ";
  1569.       LPRINT TAB(31);mehrarbeit#;
  1570.       LPRINT TAB(40);"|";werte#(4,7);
  1571.       LPRINT TAB(48);"|";werte#(5,7);TAB(56);"|";werte#(6,7);TAB(64);"|";werte#(7,7);TAB(72);"|";summeh#;
  1572.       LPRINT CHR$(13)
  1573.       LPRINT "--------------------------------------------------------------------------------"
  1574.       LPRINT CHR$(13)
  1575.       LPRINT
  1576.       LPRINT "Ort und Gesprächspartner (beginnend mit Montag) :"
  1577.       LPRINT
  1578.       FOR dummy|=0 TO 6
  1579.         LPRINT dummy|+1;"  ";;ort$(dummy|)
  1580.       NEXT dummy|
  1581.     ENDIF
  1582.   ELSE
  1583.     ALERT 3," |************************|* Drucker nicht online *|************************",1," OK ",dummy|
  1584.   ENDIF
  1585. RETURN
  1586. > PROCEDURE auf_formular_drucken
  1587.   LOCAL zeile$,dummy|,n|,z$,tag|,tag$,teil|,code|,picture$,ok!
  1588.   LOCAL woche$,a$,w|,code$,mehrarbeit#
  1589.   ok!=FALSE
  1590.   IF EXIST("spesen.frm") AND woche!=TRUE
  1591.     OPEN "I",#1,"spesen.frm"
  1592.     ok!=TRUE
  1593.   ENDIF
  1594.   IF EXIST("spesenmo.frm") AND woche!=FALSE
  1595.     OPEN "I",#1,"spesenmo.frm"
  1596.     ok!=TRUE
  1597.   ENDIF
  1598.   IF ok!=TRUE
  1599.     WHILE INSTR(LEFT$(zeile$,4),"@@")=0                 ! solange  nicht EOF
  1600.       LINE INPUT #1,zeile$                              ! Zeile einlesen
  1601.       z$=LEFT$(zeile$,2)                                ! Steuercode extrahieren
  1602.       SELECT UPPER$(TRIM$(z$))                          ! ohne Leerzeichen
  1603.       CASE "I"                                          ! Steuersequenz Drucker
  1604.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! STEUERCODE WEG
  1605.         REPEAT
  1606.           tag$=LEFT$(zeile$,INSTR(zeile$,",")-1)     ! Spalte extrah.
  1607.           zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1608.           LPRINT CHR$(VAL(tag$));
  1609.         UNTIL INSTR(zeile$,",")=0
  1610.         LPRINT CHR$(VAL(zeile$));
  1611.       CASE "T"                                    ! Textteile
  1612.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1613.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1614.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Text extrah.
  1615.         '
  1616.         IF UPPER$(TRIM$(zeile$))="STANDARDTEXT"
  1617.           LPRINT TAB(n|);standardtext$;
  1618.         ELSE IF UPPER$(TRIM$(zeile$))="KALENDERWOCHE"
  1619.           LPRINT TAB(n|);kw$;
  1620.         ELSE IF UPPER$(TRIM$(zeile$))="PERSONALNUMMER"
  1621.           LPRINT TAB(n|);persnr$;
  1622.         ELSE IF UPPER$(TRIM$(zeile$))="KOSTENSTELLE"
  1623.           LPRINT TAB(n|);kostst$;
  1624.         ELSE IF UPPER$(TRIM$(zeile$))="NAME"
  1625.           LPRINT TAB(n|);nomen$;
  1626.         ELSE
  1627.           LPRINT TAB(n|);TRIM$(zeile$);
  1628.         ENDIF
  1629.       CASE "O"                                          ! Ortszeile
  1630.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1631.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1632.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1633.         tag$=LEFT$(zeile$,INSTR(zeile$,",")-1)                  ! Tag
  1634.         teil|=VAL(RIGHT$(zeile$,LEN(zeile$)-RINSTR(zeile$,",")))! Teil extrah.
  1635.         @tag_holen(tag$,tag|)
  1636.         @ortszeile_aufteilen(tag|)
  1637.         SELECT teil|
  1638.         CASE 1
  1639.           LPRINT TAB(n|);ort1$;
  1640.         CASE 2
  1641.           LPRINT TAB(n|);ort2$;
  1642.         CASE 3
  1643.           LPRINT TAB(n|);ort3$;
  1644.         ENDSELECT
  1645.       CASE "M"                                          ! Mehrtägig
  1646.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1647.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1648.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1649.         tag$=LEFT$(zeile$,INSTR(zeile$,","))                    ! Tag
  1650.         @tag_holen(tag$,tag|)
  1651.         IF button#(0,tag|)=1
  1652.           LPRINT TAB(n|);"M";
  1653.         ENDIF
  1654.       CASE "F"                                          ! Frühstück
  1655.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1656.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1657.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1658.         tag$=LEFT$(zeile$,INSTR(zeile$,","))                    ! Tag
  1659.         @tag_holen(tag$,tag|)
  1660.         IF button#(1,tag|)=1
  1661.           LPRINT TAB(n|);"F";
  1662.         ENDIF
  1663.       CASE "E"                                          ! Essen
  1664.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1665.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1666.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1667.         tag$=LEFT$(zeile$,INSTR(zeile$,","))                    ! Tag
  1668.         @tag_holen(tag$,tag|)
  1669.         IF button#(2,tag|)=1
  1670.           LPRINT TAB(n|);"E";
  1671.         ENDIF
  1672.       CASE "Z"
  1673.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1674.         n|=VAL(LEFT$(zeile$,LEN(zeile$)-INSTR(zeile$,",")))     ! n| ist Spalte
  1675.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1676.         tag$=LEFT$(zeile$,INSTR(zeile$,",")-1)                  ! Tag
  1677.         @tag_holen(tag$,tag|)                                   ! Tag (0-6)
  1678.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1679.         code|=VAL(LEFT$(zeile$,INSTR(zeile$,",")))              ! code
  1680.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1681.         picture$=LEFT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))    ! picture$
  1682.         LPRINT TAB(n|);USING picture$,werte#(code|,tag|);
  1683.       CASE "H"
  1684.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1685.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1686.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1687.         tag$=LEFT$(zeile$,INSTR(zeile$,",")-1)                  ! Tag
  1688.         @tag_holen(tag$,tag|)                                   ! Tag (0-6)
  1689.         picture$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))   ! Rest der Zeile
  1690.         LPRINT TAB(n|);USING picture$,werte#(tag|,8);
  1691.       CASE "V"                                          ! vert. Summe
  1692.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1693.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1694.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1695.         code|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))            ! code
  1696.         picture$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))   ! Rest der Zeile
  1697.         LPRINT TAB(n|);USING picture$,werte#(code|,7);
  1698.       CASE "S"                                          ! Gesamtsumme
  1699.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1700.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1701.         picture$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))   ! Rest der Zeile
  1702.         LPRINT TAB(n|);USING picture$,summeh#;
  1703.       CASE "D"                                          ! MONAT - Dateinamen
  1704.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1705.         n|=VAL(LEFT$(zeile$,INSTR(zeile$,",")-1))               ! n| ist Spalte
  1706.         woche$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1707.         w|=VAL(woche$)                                          ! Index Woche
  1708.         a$=SPACE$(7)
  1709.         RSET a$=RIGHT$(f_name$(w|),LEN(f_name$(w|))-RINSTR(f_name$(w|),"\"))
  1710.         LPRINT TAB(n|);a$;
  1711.       CASE "W"
  1712.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1713.         n|=VAL(LEFT$(zeile$,LEN(zeile$)-INSTR(zeile$,",")))     ! n| ist Spalte
  1714.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1715.         woche$=LEFT$(zeile$,INSTR(zeile$,",")-1)                ! Woche$
  1716.         w|=VAL(woche$)                                          ! Woche (0-4)
  1717.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1718.         code$=LEFT$(zeile$,INSTR(zeile$,",")-1)                   ! code$
  1719.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1720.         picture$=LEFT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))    ! picture$
  1721.         SELECT UPPER$(TRIM$(code$))                             ! code$ zu
  1722.         CASE "KMDM"                                             ! indizes
  1723.           code|=1
  1724.           LPRINT TAB(n|);USING picture$,week#(code|,w|);
  1725.         CASE "TS"
  1726.           code|=4
  1727.           LPRINT TAB(n|);USING picture$,week#(code|,w|);
  1728.         CASE "NS"
  1729.           code|=5
  1730.           LPRINT TAB(n|);USING picture$,week#(code|,w|);
  1731.         CASE "SNB"
  1732.           code|=6
  1733.           LPRINT TAB(n|);USING picture$,week#(code|,w|);
  1734.         CASE "NK"
  1735.           code|=7
  1736.           LPRINT TAB(n|);USING picture$,week#(code|,w|);
  1737.         CASE "ZEIT"
  1738.           code|=10
  1739.           mehrarbeit#=0
  1740.           mehrarbeit#=TRUNC(week#(code|,w|))+FRAC(week#(code|,w|))*1.66666
  1741.           IF mehrarbeit#>0
  1742.             mehrarbeit#=-wochenstunden#+mehrarbeit#-mittag#
  1743.             mehrarbeit#=ROUND(TRUNC(mehrarbeit#)+FRAC(mehrarbeit#)*0.6,2)
  1744.             IF ROUND(FRAC(mehrarbeit#),2)=0.6
  1745.               mehrarbeit#=TRUNC(mehrarbeit#)+1
  1746.             ENDIF
  1747.           ENDIF
  1748.           '
  1749.           LPRINT TAB(n|);USING picture$,mehrarbeit#;
  1750.         CASE "SUM"
  1751.           code|=0
  1752.           LPRINT TAB(n|);USING picture$,weeksum#(w|,6);
  1753.         ENDSELECT
  1754.       CASE "G"
  1755.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Spalte extrah.
  1756.         n|=VAL(LEFT$(zeile$,LEN(zeile$)-INSTR(zeile$,",")))     ! n| ist Spalte
  1757.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1758.         code$=LEFT$(zeile$,INSTR(zeile$,",")-1)                 ! code$
  1759.         zeile$=RIGHT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))     ! Rest der Zeile
  1760.         picture$=LEFT$(zeile$,LEN(zeile$)-INSTR(zeile$,","))    ! picture$
  1761.         SELECT UPPER$(TRIM$(code$))                             ! code$ zu
  1762.         CASE "KMDM"                                             ! indizes
  1763.           code|=0
  1764.         CASE "TS"
  1765.           code|=1
  1766.         CASE "NS"
  1767.           code|=2
  1768.         CASE "SNB"
  1769.           code|=3
  1770.         CASE "NK"
  1771.           code|=4
  1772.         CASE "ZEIT"
  1773.           code|=5
  1774.         CASE "SUM"
  1775.           code|=6
  1776.         ENDSELECT
  1777.         LPRINT TAB(n|);USING picture$,weeksum#(5,code|);
  1778.       CASE "CR"                                         ! carriage return
  1779.         dummy|=VAL(RIGHT$(zeile$,LEN(zeile$)-RINSTR(zeile$,",")))
  1780.         FOR n|=0 TO dummy|
  1781.           LPRINT CHR$(13)
  1782.         NEXT n|
  1783.       ENDSELECT
  1784.     WEND
  1785.     CLOSE #1
  1786.   ELSE
  1787.     ALERT 1,"Datei SPESEN.FRM od.|Datei SPESENMO.FRM| nicht im aktuellen|Directory zu finden!",1," OK ",dummy|
  1788.   ENDIF
  1789. RETURN
  1790. > PROCEDURE tag_holen(VAR tag$,tag|)
  1791.   SELECT UPPER$(TRIM$(tag$))
  1792.   CASE "MO"
  1793.     tag|=0
  1794.   CASE "DI"
  1795.     tag|=1
  1796.   CASE "MI"
  1797.     tag|=2
  1798.   CASE "DO"
  1799.     tag|=3
  1800.   CASE "FR"
  1801.     tag|=4
  1802.   CASE "SA"
  1803.     tag|=5
  1804.   CASE "SO"
  1805.     tag|=6
  1806.   ENDSELECT
  1807. RETURN
  1808. > PROCEDURE statistik
  1809.   LOCAL dummy|,z1$,z2$,z3$,z4$
  1810.   ' wenn KWREAD_FLAG| = 1 dann noch keine kw-files gelesen
  1811.   ' wenn KWREAD_FLAG| = 2 dann sind kw-files eingelesen
  1812.   ~MENU_TNORMAL(menu_adr%,MENU(4),1)    ! menu aus
  1813.   z1$="--.KW Dateien lesen  = LESEN|"
  1814.   z2$="Direkt zur Statistik = STATIST|"
  1815.   z3$="Nix da, zurück       = ZURÜCK|"
  1816.   IF kwread_flag|<>2
  1817.     kwread_flag|=1              ! 0 bei prgstart möglich
  1818.     z4$="-->  KEINE DATEN GELADEN  <--"
  1819.   ELSE
  1820.     z4$="-->  DATEN SIND GELADEN  <--"
  1821.   ENDIF
  1822.   ALERT 2,z1$+z2$+z3$+z4$,kwread_flag|,"LESEN|STATIST|ZURÜCK",dummy|
  1823.   IF dummy|=1                   ! noch nicht drin also einlesen
  1824.     ERASE woche#()               ! alte felder weg = leer
  1825.     ERASE wochesum#()
  1826.     ERASE jahr#()
  1827.     ERASE zeilen$()
  1828.     '
  1829.     DIM zeilen$(200)            ! neue felder her = leer
  1830.     DIM woche#(13,52)
  1831.     DIM jahr#(15)
  1832.     DIM wochesum#(52)
  1833.     @wochen_laden
  1834.     IF raus$<>CHR$(27)
  1835.       kwread_flag|=2            ! wenn kein esc= abbruch beim einlesen
  1836.       @statistik                ! wenn geladen dann neue auswahl
  1837.     ENDIF
  1838.   ENDIF
  1839.   IF dummy|=2
  1840.     IF kwread_flag|=1           ! wenn noch keine daten da, dann erst einlesen
  1841.       @statistik
  1842.     ENDIF
  1843.     IF kwread_flag|=2 AND raus$<>CHR$(27)
  1844.       @stat_box
  1845.     ENDIF
  1846.   ENDIF
  1847. RETURN
  1848. > PROCEDURE wochen_laden
  1849.   LOCAL fname$,w|,redraw$,dummy|,h#,m#
  1850.   '
  1851.   a$="Bitte wählen Sie das Directory|"
  1852.   b$="in dem Ihre Datenfiles (nn.KW)|"
  1853.   c$="gelesen werden sollen. Direct.|"
  1854.   d$="öffnen und OK clicken reicht.."
  1855.   ALERT 3,a$+b$+c$+d$,1,"  OK  ",dummy|
  1856.   FILESELECT pfad$,"",filename$
  1857.   a|=RINSTR(filename$,"\")
  1858.   pfad$=LEFT$(filename$,a|)                     ! pfad für alle neu
  1859.   '
  1860.   kws|=0                                        ! anzahl wochen=0
  1861.   GET 196,136,444,275+20,redraw$                ! redraw vorbereiten
  1862.   DEFFILL 1,0
  1863.   PBOX 200,140,440,275
  1864.   PBOX 203,143,436,272
  1865.   TEXT 250,170,"Es wird gerade die"
  1866.   TEXT 270,190,"Kalenderwoche"
  1867.   TEXT 280,230,"geladen ..."
  1868.   TEXT 270,260,"ESC = Abbruch"
  1869.   '
  1870.   WHILE w|<52             ! anzahl wochen 52 (w|)
  1871.     INC w|
  1872.     fname$=pfad$+STR$(w|)+".KW"
  1873.     TEXT 310,210,STR$(w|)               ! kw ausgeben
  1874.     '
  1875.     raus$=INKEY$                        ! abbruch mit esc
  1876.     EXIT IF raus$=CHR$(27)              ! jawoll
  1877.     '
  1878.     IF EXIST(fname$)            ! wenn fname$ existiert, so wird er geladen
  1879.       INC kws|                  ! anzahl geladener wochen
  1880.       OPEN "I",#1,fname$                        ! so läuft die routine durch
  1881.       RECALL #1,zeilen$(),-1,zeilenanzahl#       ! alle wochen mit inhalt
  1882.       CLOSE
  1883.       FOR i&=0 TO zeilenanzahl#-1 STEP 14               !-->>WOCHENSUMMEN BILDEN
  1884.         ADD woche#(0,w|),VAL(zeilen$(i&))               !KM
  1885.         ADD woche#(1,w|),VAL(zeilen$(i&+1))             !KM-DM
  1886.         ADD woche#(2,w|),VAL(zeilen$(i&+2))             !h-Anf.
  1887.         ADD woche#(3,w|),VAL(zeilen$(i&+3))             !h-Ende
  1888.         ADD woche#(4,w|),VAL(zeilen$(i&+4))             !Spesen Tag
  1889.         ADD woche#(5,w|),VAL(zeilen$(i&+5))             !Spesen Nacht
  1890.         ADD woche#(6,w|),VAL(zeilen$(i&+6))             !Spesen n. Beleg
  1891.         ADD woche#(7,w|),VAL(zeilen$(i&+7))             !Nebenkosten
  1892.         ADD woche#(8,w|),VAL(zeilen$(i&+8))             !Ort
  1893.         ADD woche#(9,w|),VAL(zeilen$(i&+9))             !h-aussen
  1894.         IF INSTR(zeilen$(i&+8),standardtext$)>0        ! wenn büro dann pause
  1895.           h#=TRUNC(VAL(zeilen$(i&+10)))
  1896.           m#=(FRAC(VAL(zeilen$(i&+10)))*1.66666)-0.5
  1897.           zeilen$(i&+10)=STR$(h#+m#)                     !h-Ende - 1/2 stunde
  1898.         ENDIF
  1899.         ADD woche#(10,w|),VAL(zeilen$(i&+10))           !h-calc
  1900.         ADD woche#(11,w|),VAL(zeilen$(i&+11))           !button 0  M
  1901.         ADD woche#(12,w|),VAL(zeilen$(i&+12))           !  "    1  F
  1902.         ADD woche#(13,w|),VAL(zeilen$(i&+13))           !  "    2  E
  1903.         wochesum#(w|)=woche#(1,w|)+woche#(4,w|)+woche#(5,w|)+woche#(6,w|)+woche#(7,w|)
  1904.       NEXT i&
  1905.     ENDIF
  1906.     ADD jahr#(0),woche#(0,w|)              ! jahres - KM
  1907.     ADD jahr#(1),woche#(1,w|)              ! jahres - KM-DM
  1908.     ADD jahr#(2),woche#(2,w|)              ! jahres - h-Anf.
  1909.     ADD jahr#(3),woche#(3,w|)              ! jahres - h-Ende
  1910.     ADD jahr#(4),woche#(4,w|)              ! jahres - Spesen Tag
  1911.     ADD jahr#(5),woche#(5,w|)              ! jahres - Spesen Nacht
  1912.     ADD jahr#(6),woche#(6,w|)              ! jahres - Spesen n. Beleg
  1913.     ADD jahr#(7),woche#(7,w|)              ! jahres - Nebenkosten
  1914.     ADD jahr#(8),woche#(8,w|)              ! jahres - Ort
  1915.     ADD jahr#(9),woche#(9,w|)              ! jahres - h-aussen
  1916.     ADD jahr#(10),woche#(10,w|)            ! jahres - h-calc
  1917.     ADD jahr#(11),woche#(11,w|)            ! jahres - button 0  M
  1918.     ADD jahr#(12),woche#(12,w|)            ! jahres -   "    1  F
  1919.     ADD jahr#(13),woche#(13,w|)            ! jahres -   "    2  E
  1920.     ADD jahr#(14),wochesum#(w|)            ! jahres - summe aller spesen
  1921.   WEND
  1922.   PUT 196,136,redraw$                           ! redraw
  1923. RETURN
  1924. > PROCEDURE stat_box
  1925.   LOCAL backgr$,stat_adr%,a$
  1926.   LET stat&=5           !RSC_TREE
  1927.   LET wochen&=12        !Obj in #5      kws|       = anzahl geladener wochen
  1928.   LET ad&=13            !Obj in #5      jahr(11)   = anzahl aussendiensttage
  1929.   LET essen&=14         !Obj in #5      jahr(13)   = anzahl geschäftsessen
  1930.   LET km&=15            !Obj in #5      jahr(0)    = gefahrene KM
  1931.   LET kmdm&=16          !Obj in #5      jahr(1)    = erhaltenes km-geld
  1932.   LET ts&=17            !Obj in #5      jahr(4)    = erhaltene tagesspesen
  1933.   LET ns&=18            !Obj in #5      jahr(5)    = abgerechnete nachtspesen
  1934.   LET snb&=19           !Obj in #5      jahr(6)    = abgerechnete spesen n.beleg
  1935.   LET nk&=20            !Obj in #5      jahr(7)    = abgerechnete nebenkosten
  1936.   LET sum&=21           !Obj in #5      jahr(14)   = summe aller abger. wochen
  1937.   '
  1938.   LET woarbzgr&=22      !Obj in #5      Grafik-radio-buttons
  1939.   LET kmgr&=23          !Obj in #5
  1940.   LET kmdmgr&=24        !Obj in #5
  1941.   LET tsgr&=25          !Obj in #5
  1942.   LET nsgr&=26          !Obj in #5
  1943.   LET snbgr&=27         !Obj in #5
  1944.   LET nkgr&=28          !Obj in #5
  1945.   LET sumgr&=29         !Obj in #5
  1946.   LET grafik&=30        !Obj in #5      Grafik aufrufen
  1947.   LET zurueck&=31       !Obj in #5      zurück zum eingabefeld
  1948.   '
  1949.   ~RSRC_GADDR(0,stat&,stat_adr%)                    ! adresse zuweisen
  1950.   ~FORM_CENTER(stat_adr%,x&,y&,w&,h&)               ! ausdehnung holen
  1951.   SGET backgr$                                      ! redraw vorbereiten
  1952.   '
  1953.   CHAR{{OB_SPEC(stat_adr%,wochen&)}}=STR$(kws|)        ! wertzuweisung
  1954.   CHAR{{OB_SPEC(stat_adr%,ad&)}}=STR$(jahr#(11))        ! der Jahres-
  1955.   CHAR{{OB_SPEC(stat_adr%,essen&)}}=STR$(jahr#(13))     ! summen
  1956.   CHAR{{OB_SPEC(stat_adr%,km&)}}=STR$(jahr#(0))
  1957.   a$=STR$(jahr#(1),8,2)
  1958.   CHAR{{OB_SPEC(stat_adr%,kmdm&)}}=a$                  ! mit vorgeschalteter
  1959.   '
  1960.   a$=STR$(jahr#(4),7,2)
  1961.   CHAR{{OB_SPEC(stat_adr%,ts&)}}=a$                    ! anpassung der
  1962.   '
  1963.   a$=STR$(jahr#(5),7,2)
  1964.   CHAR{{OB_SPEC(stat_adr%,ns&)}}=a$                    ! nachkommastellen
  1965.   '
  1966.   a$=STR$(jahr#(6),7,2)
  1967.   CHAR{{OB_SPEC(stat_adr%,snb&)}}=a$
  1968.   '
  1969.   a$=STR$(jahr#(7),7,2)
  1970.   CHAR{{OB_SPEC(stat_adr%,nk&)}}=a$
  1971.   '
  1972.   a$=STR$(jahr#(14),8,2)
  1973.   CHAR{{OB_SPEC(stat_adr%,sum&)}}=a$
  1974.   '
  1975.   '
  1976.   ~OBJC_DRAW(stat_adr%,0,7,x&,y&,w&,h&)             ! zeichnen
  1977.   a%=FORM_DO(stat_adr%,0)                           ! EXIT-button abwarten
  1978.   '
  1979.   SELECT BCLR(a%,15)   !ohne doppelclick
  1980.   CASE grafik&                               ! GRAFIK-FELD-buttons
  1981.     IF OB_STATE(stat_adr%,woarbzgr&)=1       ! wochenarbeitszeit gewählt
  1982.       buttonkennung|=1
  1983.       mittelflag!=TRUE
  1984.       defaultvalue#=37.5
  1985.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  1986.     ELSE IF OB_STATE(stat_adr%,kmgr&)=1      ! KMfeld gewählt
  1987.       buttonkennung|=2
  1988.       mittelflag!=TRUE
  1989.       defaultvalue#=0
  1990.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  1991.     ELSE IF OB_STATE(stat_adr%,kmdmgr&)=1    ! kilometergeld gewählt
  1992.       buttonkennung|=3
  1993.       mittelflag!=TRUE
  1994.       defaultvalue#=0
  1995.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  1996.     ELSE IF OB_STATE(stat_adr%,tsgr&)=1      ! tagesspesen gewählt
  1997.       buttonkennung|=4
  1998.       mittelflag!=TRUE
  1999.       defaultvalue#=0
  2000.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  2001.     ELSE IF OB_STATE(stat_adr%,nsgr&)=1      ! nachtspesen gewählt
  2002.       buttonkennung|=5
  2003.       mittelflag!=TRUE
  2004.       defaultvalue#=0
  2005.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  2006.     ELSE IF OB_STATE(stat_adr%,snbgr&)=1     ! spesen n. beleg gewählt
  2007.       buttonkennung|=6
  2008.       mittelflag!=TRUE
  2009.       defaultvalue#=0
  2010.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  2011.     ELSE IF OB_STATE(stat_adr%,nkgr&)=1      ! nebenkosten gewählt
  2012.       buttonkennung|=7
  2013.       mittelflag!=TRUE
  2014.       defaultvalue#=0
  2015.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  2016.     ELSE IF OB_STATE(stat_adr%,sumgr&)=1     ! spesensumme gewählt
  2017.       buttonkennung|=8
  2018.       mittelflag!=TRUE
  2019.       defaultvalue#=0
  2020.       @stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  2021.     ENDIF
  2022.     OB_STATE(stat_adr%,grafik&)=0             !grafikfeld aus
  2023.   CASE zurueck&                               ! ZURÜCK-FELD
  2024.     OB_STATE(stat_adr%,zurueck&)=0            !zurück-feld aus
  2025.   ENDSELECT
  2026.   SPUT backgr$                                ! redraw
  2027. RETURN
  2028. > PROCEDURE stat_grafik(buttonkennung|,mittelflag!,defaultvalue#)
  2029.   ' buttonkennung| = nummer des aktiven buttons (1 - 8)
  2030.   ' mittelflag!    = wenn TRUE, dann horizontal das mittel einzeichnen
  2031.   ' defaultvalue   = z.B. horizontaler strich bei 37.5 wochenarb.std
  2032.   '
  2033.   LOCAL x0#,y0#,x1#,y1#,headline$,max#,skala#,sumskala#,exp|,yskala1#,teilung1#
  2034.   LOCAL yskala2#,teilung2#,xname$,mittel#,i|,n|
  2035.   DIM wo_wert#(53),sum_wo_wert#(53)
  2036.   '
  2037.   IF buttonkennung|=1                           ! wochenarbeitszeit gewählt
  2038.     headline$="DARSTELLUNG DER WOCHENARBEITSZEIT [h]"
  2039.     xname$="KW"
  2040.     FOR i|=0 TO 52
  2041.       wo_wert#(i|)=woche#(10,i|)                          ! übergabe an wo_wert()
  2042.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|)     ! Summenbildung (1 - 52)
  2043.       IF wo_wert#(i|)>max#
  2044.         max#=wo_wert#(i|)                         ! maximum holen
  2045.       ENDIF
  2046.     NEXT i|
  2047.     mittel#=sum_wo_wert#(53)/kws|
  2048.     skala#=INT(max#)
  2049.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2050.     '
  2051.   ELSE IF buttonkennung|=2                           ! kilometer gewählt
  2052.     headline$="DARSTELLUNG DER REISEKILOMETER [KM]"
  2053.     xname$="KW"
  2054.     FOR i|=0 TO 52
  2055.       wo_wert#(i|)=woche#(0,i|)                   ! übergabe an wo_wert()
  2056.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2057.       IF wo_wert#(i|)>max#
  2058.         max#=wo_wert#(i|)                         ! maximum holen
  2059.       ENDIF
  2060.     NEXT i|
  2061.     mittel#=sum_wo_wert#(53)/kws|
  2062.     skala#=INT(max#)
  2063.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2064.     '
  2065.   ELSE IF buttonkennung|=3                           ! kilometergeld gewählt
  2066.     headline$="DARSTELLUNG DES KILOMETERGELDES [DM]"
  2067.     xname$="KW"
  2068.     FOR i|=0 TO 52
  2069.       wo_wert#(i|)=woche#(1,i|)                   ! übergabe an wo_wert()
  2070.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2071.       IF wo_wert#(i|)>max#
  2072.         max#=wo_wert#(i|)                         ! maximum holen
  2073.       ENDIF
  2074.     NEXT i|
  2075.     mittel#=sum_wo_wert#(53)/kws|
  2076.     skala#=INT(max#)
  2077.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2078.     '
  2079.   ELSE IF buttonkennung|=4                           ! tagesspesen gewählt
  2080.     headline$="DARSTELLUNG DER TAGESSPESEN [DM]"
  2081.     xname$="KW"
  2082.     FOR i|=0 TO 52
  2083.       wo_wert#(i|)=woche#(4,i|)                   ! übergabe an wo_wert()
  2084.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2085.       IF wo_wert#(i|)>max#
  2086.         max#=wo_wert#(i|)                         ! maximum holen
  2087.       ENDIF
  2088.     NEXT i|
  2089.     mittel#=sum_wo_wert#(53)/kws|
  2090.     skala#=INT(max#)
  2091.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2092.     '
  2093.   ELSE IF buttonkennung|=5                           ! nachtspesen gewählt
  2094.     headline$="DARSTELLUNG DER NACHTSPESEN [DM]"
  2095.     xname$="KW"
  2096.     FOR i|=0 TO 52
  2097.       wo_wert#(i|)=woche#(5,i|)                   ! übergabe an wo_wert()
  2098.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2099.       IF wo_wert#(i|)>max#
  2100.         max#=wo_wert#(i|)                         ! maximum holen
  2101.       ENDIF
  2102.     NEXT i|
  2103.     mittel#=sum_wo_wert#(53)/kws|
  2104.     skala#=INT(max#)
  2105.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2106.     '
  2107.   ELSE IF buttonkennung|=6                           ! spesen n. beleg gewählt
  2108.     headline$="DARSTELLUNG DER SPESEN NACH BELEG [DM]"
  2109.     xname$="KW"
  2110.     FOR i|=0 TO 52
  2111.       wo_wert#(i|)=woche#(6,i|)                   ! übergabe an wo_wert()
  2112.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2113.       IF wo_wert#(i|)>max#
  2114.         max#=wo_wert#(i|)                         ! maximum holen
  2115.       ENDIF
  2116.     NEXT i|
  2117.     mittel#=sum_wo_wert#(53)/kws|
  2118.     skala#=INT(max#)
  2119.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2120.     '
  2121.   ELSE IF buttonkennung|=7                           ! nebenkosten gewählt
  2122.     headline$="DARSTELLUNG DER NEBENKOSTEN [DM]"
  2123.     xname$="KW"
  2124.     FOR i|=0 TO 52
  2125.       wo_wert#(i|)=woche#(7,i|)                   ! übergabe an wo_wert()
  2126.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2127.       IF wo_wert#(i|)>max#
  2128.         max#=wo_wert#(i|)                         ! maximum holen
  2129.       ENDIF
  2130.     NEXT i|
  2131.     mittel#=sum_wo_wert#(53)/kws|
  2132.     skala#=INT(max#)
  2133.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2134.     '
  2135.   ELSE IF buttonkennung|=8                           ! summe-spesen gewählt
  2136.     headline$="DARSTELLUNG DER WOCHENSPESEN [DM]"
  2137.     xname$="KW"
  2138.     FOR i|=0 TO 52
  2139.       wo_wert#(i|)=wochesum#(i|)                   ! übergabe an wo_wert()
  2140.       sum_wo_wert#(i|+1)=sum_wo_wert#(i|)+wo_wert#(i|) ! Summenbildung (1 - 52)
  2141.       IF wo_wert#(i|)>max#
  2142.         max#=wo_wert#(i|)                         ! maximum holen
  2143.       ENDIF
  2144.     NEXT i|
  2145.     mittel#=sum_wo_wert#(53)/kws|
  2146.     skala#=INT(max#)
  2147.     sumskala#=INT(sum_wo_wert#(53))               ! läuft von 1-52
  2148.   ENDIF
  2149.   '
  2150.   ' G R A F I K T E I L
  2151.   CLS
  2152.   x0#=100
  2153.   y0#=340
  2154.   x1#=x0#+52*10
  2155.   y1#=20
  2156.   LINE x0#,y0#,x1#+20,y0#                           ! basislinie (x-achse)
  2157.   LINE x0#,y0#,x0#,y1#                              ! y-achse
  2158.   LINE x0#-40,y0#,x0#-40,y1#
  2159.   DEFTEXT 1,0,0,4
  2160.   FOR i|=1 TO 52                                ! x-achse teilung einzeichen
  2161.     LINE x0#+10*i|,y0#,x0#+10*i|,y0#+3
  2162.     IF MOD(i|,5)=0                              ! wenn teilung =5 oder =10
  2163.       TEXT x0#-(LEN(STR$(i|))*2)+10*i|,y0#+15,STR$(i|)  ! dann strich länger
  2164.       LINE x0#+10*i|,y0#,x0#+10*i|,y0#+6            ! und kw-nummer zentriert
  2165.     ENDIF
  2166.   NEXT i|
  2167.   DEFTEXT 1,0,0,13
  2168.   TEXT x1#-100,y0#+33,xname$                      ! x-achse name
  2169.   mitte|=320-(LEN(headline$)/2)*8               ! headline zentrieren
  2170.   TEXT mitte|,y1#-2,headline$                    ! headline ausgeben
  2171.   '
  2172.   ' yachse1 auf pixel (y0-(y0-y1)), wochenwerte
  2173.   DEFTEXT 1,0,0,4
  2174.   exp|=LEN(STR$(skala#))                         !länge vorkommaseite
  2175.   yskala1#=(VAL(LEFT$(STR$(max#),1))+1)*(10^(exp|-1))! wenn wert 51, dann
  2176.   teilung1#=(y0#-y1#)/yskala1#                      ! left$=5+1*10^1=60...
  2177.   FOR i|=1 TO VAL(LEFT$(STR$(max#),1))+1  ! bei 51 also bis 6
  2178.     LINE x0#,y0#-teilung1#*i|*10^(exp|-1),x0#-3,y0#-teilung1#*i|*10^(exp|-1)
  2179.     TEXT x0#-30,y0#+2-teilung1#*i|*10^(exp|-1),STR$(i|*10^(exp|-1))
  2180.   NEXT i|
  2181.   '
  2182.   ' yachse2 auf pixel (y0-(y0-y1)), JAHRESSUMME
  2183.   DEFTEXT 1,0,0,4
  2184.   exp|=LEN(STR$(sumskala#))                      !länge vorkommaseite
  2185.   yskala2#=(VAL(LEFT$(STR$(sumskala#),1))+1)*(10^(exp|-1))! wenn wert 51, dann
  2186.   teilung2#=(y0#-y1#)/yskala2#                      ! left$=5+1*10^1=60...
  2187.   FOR i|=1 TO VAL(LEFT$(STR$(sumskala#),1))+1  ! bei 51 also bis 6
  2188.     LINE x0#-40,y0#-teilung2#*i|*10^(exp|-1),x0#-40-3,y0#-teilung2#*i|*10^(exp|-1)
  2189.     TEXT x0#-40-30,y0#+2-teilung2#*i|*10^(exp|-1),STR$(i|*10^(exp|-1))
  2190.   NEXT i|
  2191.   TEXT x0#-32,y0#,"WOCHE"
  2192.   TEXT x0#-67,y0#,"JAHR"
  2193.   '
  2194.   DEFFILL 1,2,4
  2195.   FOR i|=1 TO 53
  2196.     PBOX x0#+10*(i|)-2,y0#,x0#+10*(i|)+2,y0#-(wo_wert#(i|)*teilung1#)
  2197.     LINE x0#+10*(i|-2),y0#-(sum_wo_wert#(i|-1)*teilung2#),x0#+10*(i|-1),y0#-(sum_wo_wert#(i|)*teilung2#)
  2198.   NEXT i|
  2199.   IF mittelflag!=TRUE
  2200.     LINE x0#,y0#-mittel#*teilung1#,x1#+2,y0#-mittel#*teilung1#    ! MITTELLINIE
  2201.     TEXT x1#-80,y0#-mittel#*teilung1#+2,"MITTEL/WOCHE"
  2202.   ENDIF
  2203.   IF defaultvalue#>0
  2204.     LINE x0#,y0#-defaultvalue#*teilung1#,x1#+2,y0#-defaultvalue#*teilung1#    ! DEFAULT-linie
  2205.     TEXT x1#-70,y0#-defaultvalue#*teilung1#+2,"SOLL/WOCHE"
  2206.   ENDIF
  2207.   DEFTEXT 1,0,0,6
  2208.   TEXT 50,WORK_OUT(1)-20,"TASTE 'ESC' : ZURÜCK ,    TASTE 'H' : HARDCOPY"
  2209.   DO
  2210.     d$=INKEY$
  2211.     IF d$="H" OR d$="h"
  2212.       TEXT 50,WORK_OUT(1)-20,SPACE$(50) ! infotxt weg
  2213.       @select_hardcopy
  2214.       d$=CHR$(27)
  2215.     ENDIF
  2216.     EXIT IF d$=CHR$(27)
  2217.   LOOP
  2218.   DEFTEXT 1,0,0,13
  2219.   DEFFILL 1,0,0
  2220.   ' E N D E   G R A F I K T E I L
  2221.   ERASE wo_wert#()
  2222.   ERASE sum_wo_wert#()
  2223.   OB_STATE(stat_adr%,grafik&)=0             !grafikfeld aus
  2224.   @stat_box
  2225. RETURN
  2226. > PROCEDURE ausland_laden
  2227.   DIM tausland$(1000)           ! temporäre arrays erstellen
  2228.   DIM tausland_tag%(1000)
  2229.   DIM tausland_nacht%(1000)
  2230.   LOCAL i&,n&                   ! locale vars
  2231.   OPEN "I",#1,"spesen.aus"      ! file öffnen
  2232.   WHILE NOT EOF(#1)             ! schleife
  2233.     INPUT #1,tausland$(i&)
  2234.     EXIT IF INSTR(tausland$(i&),"***")>0       ! abbruchbedingung
  2235.     INPUT #1,tausland_tag%(i&)
  2236.     INPUT #1,tausland_nacht%(i&)
  2237.     INC i&
  2238.   WEND
  2239.   CLOSE #1                      ! file schließen
  2240.   DEC i&                        ! zähler eins zurück
  2241.   DIM ausland$(i&)              ! richtig dimensionierte arrays
  2242.   DIM ausland_tag%(i&)
  2243.   DIM ausland_nacht%(i&)
  2244.   FOR n&=0 TO i&                ! inhalt rüberschaufeln
  2245.     ausland$(n&)=tausland$(n&)
  2246.     ausland_tag%(n&)=tausland_tag%(n&)
  2247.     ausland_nacht%(n&)=tausland_nacht%(n&)
  2248.   NEXT n&
  2249.   ERASE tausland$(),tausland_tag%(),tausland_nacht%()
  2250.   @ausland_rsc_defitionen
  2251.   '
  2252.   ~RSRC_GADDR(0,ausland&,ausland_adr%)                ! adresse zuweisen
  2253.   OB_H(ausland_adr%,sldbox&)=INT(OB_H(ausland_adr%,sldfr&)/i&) ! relative schieberhöhe
  2254.   IF OB_H(ausland_adr%,sldbox&)<10      ! mindestgröße
  2255.     OB_H(ausland_adr%,sldbox&)=10
  2256.   ENDIF
  2257. RETURN
  2258. > PROCEDURE ausland_rsc_defitionen
  2259.   LET ausland&=6 !RSC_TREE
  2260.   LET landbox&=1 !Obj in #6
  2261.   LET land1&=2 !Obj in #6
  2262.   LET land2&=3 !Obj in #6
  2263.   LET land3&=4 !Obj in #6
  2264.   LET land4&=5 !Obj in #6
  2265.   LET land5&=6 !Obj in #6
  2266.   LET land6&=7 !Obj in #6
  2267.   LET land7&=8 !Obj in #6
  2268.   LET land8&=9 !Obj in #6
  2269.   LET land9&=10 !Obj in #6
  2270.   LET tagbox&=11 !Obj in #6
  2271.   LET tag1&=12 !Obj in #6
  2272.   LET tag2&=13 !Obj in #6
  2273.   LET tag3&=14 !Obj in #6
  2274.   LET tag4&=15 !Obj in #6
  2275.   LET tag5&=16 !Obj in #6
  2276.   LET tag6&=17 !Obj in #6
  2277.   LET tag7&=18 !Obj in #6
  2278.   LET tag8&=19 !Obj in #6
  2279.   LET tag9&=20 !Obj in #6
  2280.   LET nachtbox&=21 !Obj in #6
  2281.   LET nacht1&=22 !Obj in #6
  2282.   LET nacht2&=23 !Obj in #6
  2283.   LET nacht3&=24 !Obj in #6
  2284.   LET nacht4&=25 !Obj in #6
  2285.   LET nacht5&=26 !Obj in #6
  2286.   LET nacht6&=27 !Obj in #6
  2287.   LET nacht7&=28 !Obj in #6
  2288.   LET nacht8&=29 !Obj in #6
  2289.   LET nacht9&=30 !Obj in #6
  2290.   LET fastup&=31 !Obj in #6
  2291.   LET slowup&=32 !Obj in #6
  2292.   LET slowdown&=33 !Obj in #6
  2293.   LET fastdown&=34 !Obj in #6
  2294.   LET land&=35 !Obj in #6
  2295.   LET tag&=36 !Obj in #6
  2296.   LET nacht&=37 !Obj in #6
  2297.   LET sldfr&=39 !Obj in #6
  2298.   LET sldbox&=40 !Obj in #6
  2299.   LET ausname&=47 !Obj in #6
  2300. RETURN
  2301. > PROCEDURE ausland_box
  2302.   LOCAL redraw$,ausland_adr%,x%,y%,b%,t%,a&
  2303.   '
  2304.   ~RSRC_GADDR(0,ausland&,ausland_adr%)                ! adresse zuweisen
  2305.   ~FORM_CENTER(ausland_adr%,x&,y&,w&,h&)              ! ausdehnung holen
  2306.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$               ! redraw vorbereiten
  2307.   '
  2308.   @ausland_countrydrawinit
  2309.   @ausland_deselect
  2310.   ~OBJC_DRAW(ausland_adr%,0,7,x&,y&,w&,h&)        ! zeichnen
  2311.   @ausland_countrydraw
  2312.   REPEAT
  2313.     IF MOUSEK=1                             ! wenn linke maustaste gedrückt
  2314.       a&=0
  2315.       a&=OBJC_FIND(ausland_adr%,0,5,MOUSEX,MOUSEY+19)
  2316.       SELECT a&
  2317.       CASE sldbox&
  2318.         @ausland_deselect
  2319.         @ausland_slidebox
  2320.       CASE fastup&
  2321.         @ausland_deselect
  2322.         @ausland_fastup
  2323.       CASE slowup&
  2324.         @ausland_deselect
  2325.         @ausland_slowup
  2326.       CASE slowdown&
  2327.         @ausland_deselect
  2328.         @ausland_slowdown
  2329.       CASE fastdown&
  2330.         @ausland_deselect
  2331.         @ausland_fastdown
  2332.       ENDSELECT
  2333.       IF a&>=land1& AND a&<=land9&
  2334.         @ausland_deselect
  2335.         ~OBJC_CHANGE(ausland_adr%,a&,0,x&,y&,w&,h&,1,1) ! selected
  2336.       ENDIF
  2337.     ENDIF
  2338.   UNTIL a&=ausname& OR ASC(INKEY$)=13                   ! exitfeld
  2339.   PUT x&-4,y&-4,redraw$                                 ! redraw
  2340. RETURN
  2341. > PROCEDURE ausland_slidebox
  2342.   LOCAL ydiff&
  2343.   pos&=GRAF_SLIDEBOX(ausland_adr%,sldfr&,sldbox&,1)
  2344.   ydiff&=OB_H(ausland_adr%,sldfr&)-OB_H(ausland_adr%,sldbox&)   ! freie pixel
  2345.   OB_Y(ausland_adr%,sldbox&)=ydiff&/1000*pos&
  2346.   ~OBJC_DRAW(ausland_adr%,sldfr&,1,x&,y&,w&,h&)
  2347.   @ausland_countrydraw
  2348. RETURN
  2349. > PROCEDURE ausland_fastup
  2350.   LOCAL ydiff&,ypos&,npos&
  2351.   ~OBJC_CHANGE(ausland_adr%,fastup&,0,x&,y&,w&,h&,1,1)  ! selected
  2352.   '
  2353.   ydiff&=OB_H(ausland_adr%,sldfr&)-OB_H(ausland_adr%,sldbox&)   ! freie pixel
  2354.   ypos&=OB_Y(ausland_adr%,sldbox&)                              ! akt. position
  2355.   npos&=ypos&-ydiff&/10                 ! alte minus 10 %
  2356.   IF npos&<0                            ! max. bis null
  2357.     npos&=0
  2358.   ENDIF
  2359.   pos&=(1000/ydiff&)*npos&              ! 1000er raster ermitteln
  2360.   OB_Y(ausland_adr%,sldbox&)=npos&      ! neue position im feld festlegen
  2361.   ~OBJC_DRAW(ausland_adr%,sldfr&,1,x&,y&,w&,h&)         ! object-redraw
  2362.   '
  2363.   ~OBJC_CHANGE(ausland_adr%,fastup&,0,x&,y&,w&,h&,0,1)  ! de-selected
  2364.   @ausland_countrydraw
  2365. RETURN
  2366. > PROCEDURE ausland_slowup
  2367.   LOCAL ydiff&,ypos&,npos&
  2368.   ~OBJC_CHANGE(ausland_adr%,slowup&,0,x&,y&,w&,h&,1,1)  ! selected
  2369.   '
  2370.   ydiff&=OB_H(ausland_adr%,sldfr&)-OB_H(ausland_adr%,sldbox&)   ! freie pixel
  2371.   ypos&=OB_Y(ausland_adr%,sldbox&)                              ! akt. position
  2372.   npos&=ypos&-ydiff&/100                ! alte minus 1 %
  2373.   IF npos&<0                            ! max. bis null
  2374.     npos&=0
  2375.   ENDIF
  2376.   pos&=(1000/ydiff&)*npos&              ! 1000er raster ermitteln
  2377.   OB_Y(ausland_adr%,sldbox&)=npos&      ! neue position im feld festlegen
  2378.   ~OBJC_DRAW(ausland_adr%,sldfr&,1,x&,y&,w&,h&)         ! object-redraw
  2379.   '
  2380.   ~OBJC_CHANGE(ausland_adr%,slowup&,0,x&,y&,w&,h&,0,1)  ! de-selected
  2381.   @ausland_countrydraw
  2382. RETURN
  2383. > PROCEDURE ausland_slowdown
  2384.   LOCAL ydiff&,ypos&,npos&
  2385.   ~OBJC_CHANGE(ausland_adr%,slowdown&,0,x&,y&,w&,h&,1,1)  ! selected
  2386.   '
  2387.   ydiff&=OB_H(ausland_adr%,sldfr&)-OB_H(ausland_adr%,sldbox&)   ! freie pixel
  2388.   ypos&=OB_Y(ausland_adr%,sldbox&)                              ! akt. position
  2389.   npos&=ypos&+ydiff&/100                ! alte plus 1 %
  2390.   IF npos&>ydiff&                       ! max. bis voll unten
  2391.     npos&=ydiff&
  2392.   ENDIF
  2393.   pos&=(1000/ydiff&)*npos&              ! 1000er raster ermitteln
  2394.   OB_Y(ausland_adr%,sldbox&)=npos&      ! neue position im feld festlegen
  2395.   ~OBJC_DRAW(ausland_adr%,sldfr&,1,x&,y&,w&,h&)         ! object-redraw
  2396.   '
  2397.   ~OBJC_CHANGE(ausland_adr%,slowdown&,0,x&,y&,w&,h&,0,1)  ! de-selected
  2398.   @ausland_countrydraw
  2399. RETURN
  2400. > PROCEDURE ausland_fastdown
  2401.   LOCAL ydiff&,ypos&,npos&
  2402.   ~OBJC_CHANGE(ausland_adr%,fastdown&,0,x&,y&,w&,h&,1,1)  ! selected
  2403.   '
  2404.   ydiff&=OB_H(ausland_adr%,sldfr&)-OB_H(ausland_adr%,sldbox&)   ! freie pixel
  2405.   ypos&=OB_Y(ausland_adr%,sldbox&)                              ! akt. position
  2406.   npos&=ypos&+ydiff&/10                 ! alte plus 10 %
  2407.   IF npos&>ydiff&                       ! max. bis voll unten
  2408.     npos&=ydiff&
  2409.   ENDIF
  2410.   pos&=(1000/ydiff&)*npos&              ! 1000er raster ermitteln
  2411.   OB_Y(ausland_adr%,sldbox&)=npos&      ! neue position im feld festlegen
  2412.   ~OBJC_DRAW(ausland_adr%,sldfr&,1,x&,y&,w&,h&)         ! object-redraw
  2413.   '
  2414.   ~OBJC_CHANGE(ausland_adr%,fastdown&,0,x&,y&,w&,h&,0,1)  ! de-selected
  2415.   @ausland_countrydraw
  2416. RETURN
  2417. > PROCEDURE ausland_countrydraw
  2418.   LOCAL zraster#,zeile#
  2419.   ' pos& in 0 - 1000
  2420.   ' ausland$(),ausland_tag%(),ausland_nacht%()
  2421.   ' anzahl länder in dim?() zeigt anzahl!
  2422.   ' PRINT DIM?(ausland$())-1
  2423.   ' 1000er raster
  2424.   zraster#=1000/(DIM?(ausland$())-9)
  2425.   IF pos&>0
  2426.     zeile#=pos&/zraster#
  2427.   ELSE
  2428.     zeile#=0
  2429.   ENDIF
  2430.   CHAR{{OB_SPEC(ausland_adr%,land1&)}}=ausland$(zeile#)
  2431.   CHAR{{OB_SPEC(ausland_adr%,land2&)}}=ausland$(zeile#+1)
  2432.   CHAR{{OB_SPEC(ausland_adr%,land3&)}}=ausland$(zeile#+2)
  2433.   CHAR{{OB_SPEC(ausland_adr%,land4&)}}=ausland$(zeile#+3)
  2434.   CHAR{{OB_SPEC(ausland_adr%,land5&)}}=ausland$(zeile#+4)
  2435.   CHAR{{OB_SPEC(ausland_adr%,land6&)}}=ausland$(zeile#+5)
  2436.   CHAR{{OB_SPEC(ausland_adr%,land7&)}}=ausland$(zeile#+6)
  2437.   CHAR{{OB_SPEC(ausland_adr%,land8&)}}=ausland$(zeile#+7)
  2438.   CHAR{{OB_SPEC(ausland_adr%,land9&)}}=ausland$(zeile#+8)
  2439.   CHAR{{OB_SPEC(ausland_adr%,tag1&)}}=STR$(ausland_tag%(zeile#))
  2440.   CHAR{{OB_SPEC(ausland_adr%,tag2&)}}=STR$(ausland_tag%(zeile#+1))
  2441.   CHAR{{OB_SPEC(ausland_adr%,tag3&)}}=STR$(ausland_tag%(zeile#+2))
  2442.   CHAR{{OB_SPEC(ausland_adr%,tag4&)}}=STR$(ausland_tag%(zeile#+3))
  2443.   CHAR{{OB_SPEC(ausland_adr%,tag5&)}}=STR$(ausland_tag%(zeile#+4))
  2444.   CHAR{{OB_SPEC(ausland_adr%,tag6&)}}=STR$(ausland_tag%(zeile#+5))
  2445.   CHAR{{OB_SPEC(ausland_adr%,tag7&)}}=STR$(ausland_tag%(zeile#+6))
  2446.   CHAR{{OB_SPEC(ausland_adr%,tag8&)}}=STR$(ausland_tag%(zeile#+7))
  2447.   CHAR{{OB_SPEC(ausland_adr%,tag9&)}}=STR$(ausland_tag%(zeile#+8))
  2448.   CHAR{{OB_SPEC(ausland_adr%,nacht1&)}}=STR$(ausland_nacht%(zeile#))
  2449.   CHAR{{OB_SPEC(ausland_adr%,nacht2&)}}=STR$(ausland_nacht%(zeile#+1))
  2450.   CHAR{{OB_SPEC(ausland_adr%,nacht3&)}}=STR$(ausland_nacht%(zeile#+2))
  2451.   CHAR{{OB_SPEC(ausland_adr%,nacht4&)}}=STR$(ausland_nacht%(zeile#+3))
  2452.   CHAR{{OB_SPEC(ausland_adr%,nacht5&)}}=STR$(ausland_nacht%(zeile#+4))
  2453.   CHAR{{OB_SPEC(ausland_adr%,nacht6&)}}=STR$(ausland_nacht%(zeile#+5))
  2454.   CHAR{{OB_SPEC(ausland_adr%,nacht7&)}}=STR$(ausland_nacht%(zeile#+6))
  2455.   CHAR{{OB_SPEC(ausland_adr%,nacht8&)}}=STR$(ausland_nacht%(zeile#+7))
  2456.   CHAR{{OB_SPEC(ausland_adr%,nacht9&)}}=STR$(ausland_nacht%(zeile#+8))
  2457.   ~OBJC_DRAW(ausland_adr%,landbox&,1,x&,y&,w&,h&)         ! object-redraw
  2458.   ~OBJC_DRAW(ausland_adr%,tagbox&,1,x&,y&,w&,h&)          ! object-redraw
  2459.   ~OBJC_DRAW(ausland_adr%,nachtbox&,1,x&,y&,w&,h&)        ! object-redraw
  2460. RETURN
  2461. > PROCEDURE ausland_countrydrawinit
  2462.   CHAR{{OB_SPEC(ausland_adr%,land1&)}}=""
  2463.   CHAR{{OB_SPEC(ausland_adr%,land2&)}}=""
  2464.   CHAR{{OB_SPEC(ausland_adr%,land3&)}}=""
  2465.   CHAR{{OB_SPEC(ausland_adr%,land4&)}}=""
  2466.   CHAR{{OB_SPEC(ausland_adr%,land5&)}}=""
  2467.   CHAR{{OB_SPEC(ausland_adr%,land6&)}}=""
  2468.   CHAR{{OB_SPEC(ausland_adr%,land7&)}}=""
  2469.   CHAR{{OB_SPEC(ausland_adr%,land8&)}}=""
  2470.   CHAR{{OB_SPEC(ausland_adr%,land9&)}}=""
  2471.   CHAR{{OB_SPEC(ausland_adr%,tag1&)}}=""
  2472.   CHAR{{OB_SPEC(ausland_adr%,tag2&)}}=""
  2473.   CHAR{{OB_SPEC(ausland_adr%,tag3&)}}=""
  2474.   CHAR{{OB_SPEC(ausland_adr%,tag4&)}}=""
  2475.   CHAR{{OB_SPEC(ausland_adr%,tag5&)}}=""
  2476.   CHAR{{OB_SPEC(ausland_adr%,tag6&)}}=""
  2477.   CHAR{{OB_SPEC(ausland_adr%,tag7&)}}=""
  2478.   CHAR{{OB_SPEC(ausland_adr%,tag8&)}}=""
  2479.   CHAR{{OB_SPEC(ausland_adr%,tag9&)}}=""
  2480.   CHAR{{OB_SPEC(ausland_adr%,nacht1&)}}=""
  2481.   CHAR{{OB_SPEC(ausland_adr%,nacht2&)}}=""
  2482.   CHAR{{OB_SPEC(ausland_adr%,nacht3&)}}=""
  2483.   CHAR{{OB_SPEC(ausland_adr%,nacht4&)}}=""
  2484.   CHAR{{OB_SPEC(ausland_adr%,nacht5&)}}=""
  2485.   CHAR{{OB_SPEC(ausland_adr%,nacht6&)}}=""
  2486.   CHAR{{OB_SPEC(ausland_adr%,nacht7&)}}=""
  2487.   CHAR{{OB_SPEC(ausland_adr%,nacht8&)}}=""
  2488.   CHAR{{OB_SPEC(ausland_adr%,nacht9&)}}=""
  2489. RETURN
  2490. > PROCEDURE ausland_deselect
  2491.   LOCAL i|
  2492.   FOR i|=land1& TO land9&
  2493.     ~OBJC_CHANGE(ausland_adr%,i|,0,x&,y&,w&,h&,0,1) ! de-selected-all
  2494.   NEXT i|
  2495. RETURN
  2496. > PROCEDURE ausland_selected(VAR tag#,nacht#)
  2497.   LOCAL zraster#,zeile#,i|,ausland_adr%
  2498.   ' TAG und NACHT sind ab hier globale variable für auslandsspesensätze
  2499.   ~RSRC_GADDR(0,ausland&,ausland_adr%)                ! adresse zuweisen
  2500.   auslandflag!(z#)=FALSE
  2501.   FOR i|=0 TO 8
  2502.     IF OB_STATE(ausland_adr%,land1&+i|)=1
  2503.       auslandflag!(z#)=TRUE
  2504.       zraster#=1000/(DIM?(ausland$())-9)
  2505.       IF pos&>0
  2506.         zeile#=pos&/zraster#+i|
  2507.       ELSE
  2508.         zeile#=0+i|
  2509.       ENDIF
  2510.       ' hier nun irgendeine übergabe
  2511.       tag#=ausland_tag%(zeile#)
  2512.       nacht#=ausland_nacht%(zeile#)
  2513.     ENDIF
  2514.   NEXT i|
  2515. RETURN
  2516. > PROCEDURE montag
  2517.   LOCAL redraw$,mondate_adr%,i|
  2518.   LET mondate&=7 !RSC_TREE
  2519.   LET modat&=4 !Obj in #7
  2520.   LET datex&=5 !Obj in #7
  2521.   '
  2522.   FOR i|=0 TO 6                               ! vorhand. datum abtrennen
  2523.     ort$(i|)=RIGHT$(ort$(i|),LEN(ort$(i|))-7) ! da sonst 2 datum hintereinand.
  2524.   NEXT i|                                     ! erscheinen
  2525.   '
  2526.   ~RSRC_GADDR(0,mondate&,mondate_adr%)                  ! adresse zuweisen
  2527.   ~FORM_CENTER(mondate_adr%,x&,y&,w&,h&)                ! ausdehnung holen
  2528.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$                 ! redraw vorbereiten
  2529.   '
  2530.   CHAR{{OB_SPEC(mondate_adr%,modat&)}}=DATE$            ! datum einsetzen
  2531.   ~OBJC_DRAW(mondate_adr%,0,7,x&,y&,w&,h&)              ! zeichnen
  2532.   ~FORM_DO(mondate_adr%,0)                              ! OK-button abwarten
  2533.   DATE$=CHAR{{OB_SPEC(mondate_adr%,modat&)}}            ! datum neu setzen
  2534.   OB_STATE(mondate_adr%,datex&)=BCLR(OB_STATE(mondate_adr%,datex&),0) !ok-button AUS
  2535.   PUT x&-4,y&-4,redraw$                                 ! redraw
  2536.   @datum_berechnen(DATE$,datum$())
  2537. RETURN
  2538. > PROCEDURE datum_berechnen(datum$,VAR datum$())
  2539.   ' Prozedur zum berechnen der fortlaufenden Kalendertage, wenn das Montagsdatum
  2540.   ' angegeben wird. Übergeben wird:
  2541.   '     Datum$=DATE$
  2542.   '     DATUM$() als array, das alle Tage enthält (beginnend mit Montags)
  2543.   '
  2544.   LOCAL i|,tag|,last_tag|,monat|,jahr&,tag$,monat$
  2545.   '
  2546.   tag|=VAL(LEFT$(datum$,2))             ! aus Datum den Tag holen
  2547.   monat|=VAL(MID$(datum$,4,2))          ! aus Datum den Monat holen
  2548.   jahr&=VAL(RIGHT$(datum$,4))           ! aus Datum das Jahr holen
  2549.   SELECT monat|
  2550.   CASE 1,3,5,7,8,10,12                  ! alle Monate mit 31 Tagen
  2551.     last_tag|=31
  2552.   CASE 4,6,9,11                         ! alle Monate mit 30 Tagen
  2553.     last_tag|=30
  2554.   CASE 2                                ! der Februar
  2555.     last_tag|=28
  2556.     IF MOD(jahr&,4)=0                   ! das Schaltjahr
  2557.       last_tag|=29
  2558.     ENDIF
  2559.   ENDSELECT
  2560.   '
  2561.   datum$(0)=STR$(tag|,2)+"."+STR$(monat|,2)+". "        ! Nulltes Element
  2562.   ort$(0)=datum$(0)+ort$(0)                             ! datum dranmogeln
  2563.   FOR i|=1 TO 6                                         ! alle 6 weiteren
  2564.     INC tag|
  2565.     IF tag|>last_tag|                                   ! nächster Monat
  2566.       tag|=1
  2567.       INC monat|
  2568.       IF monat|=13                                      ! nächstes Jahr
  2569.         monat|=1
  2570.       ENDIF
  2571.     ENDIF
  2572.     tag$=STR$(tag|,2)+"."
  2573.     monat$=STR$(monat|,2)+". "
  2574.     datum$(i|)=tag$+monat$                              ! String basteln
  2575.     ort$(i|)=datum$(i|)+ort$(i|)                        ! datum dranmogeln
  2576.   NEXT i|
  2577. RETURN
  2578. > PROCEDURE finito
  2579.   ' Menüleiste entfernen, Resource aus Speicher entfernen und
  2580.   ' reservierten Speicher wieder zurückholen.
  2581.   LOCAL dummy&
  2582.   ALERT 2," Wollen Sie das|Programm beenden?",2,"NEIN| JA ",dummy&
  2583.   IF dummy&=2
  2584.     ON BREAK CONT
  2585.     CLOSEW 0
  2586.     ~WIND_SET(0,14,0,0,0,0)
  2587.     ~MENU_BAR(menu_adr%,0)
  2588.     ~RSRC_FREE()
  2589.     ~MFREE(tree_adr%)
  2590.     RESERVE FRE(0)+total_memory%-(HIMEM-BASEPAGE)
  2591.     END
  2592.   ENDIF
  2593. RETURN
  2594. > PROCEDURE init_hintergrund
  2595.   LOCAL word&,i&
  2596.   total_memory%=HIMEM-BASEPAGE
  2597.   RESERVE FRE(0)-32500          ! reicht für alles
  2598.   tree_adr%=MALLOC(31000)
  2599.   RESTORE ob_data
  2600.   FOR i&=0 TO 30
  2601.     READ word&
  2602.     INT{tree_adr%+i&*2}=word&
  2603.   NEXT i&
  2604. ob_data:
  2605.   DATA -1,1,1,20,0,0,0,&1101,0,19,640,381
  2606.   DATA -1,-1,0,23,32,0,0,&1131,0,0,640,381
  2607.   DATA 0,0,80,381,0,0,1
  2608.   '
  2609.   OB_SPEC(tree_adr%,1)=tree_adr%+48
  2610.   bit_adr%=tree_adr%+62
  2611.   {tree_adr%+48}=bit_adr%
  2612.   screenlen&=381*80
  2613.   screen_adr%=XBIOS(2)+19*80
  2614.   '  BMOVE screen_adr%,bit_adr%,screen_len&
  2615.   ~WIND_SET(0,14,SWAP(tree_adr%),tree_adr%,0,0)
  2616.   ~FORM_DIAL(3,0,0,0,0,0,0,640,400)
  2617. RETURN
  2618. > PROCEDURE hilfe
  2619.   LOCAL redraw$,hilfe_adr%
  2620.   '
  2621.   LET hilfe&=8 !RSC_TREE
  2622.   LET helpexit&=14 !Obj in #8
  2623.   '
  2624.   ~RSRC_GADDR(0,hilfe&,hilfe_adr%)              ! adresse zuweisen
  2625.   ~FORM_CENTER(hilfe_adr%,x&,y&,w&,h&)          ! ausdehnung holen
  2626.   GET x&-4,y&-4,x&+4+w&,y&+4+h&,redraw$         ! redraw vorbereiten
  2627.   '
  2628.   ~OBJC_DRAW(hilfe_adr%,0,7,x&,y&,w&,h&)        ! zeichnen
  2629.   ~FORM_DO(hilfe_adr%,0)                        ! OK-button abwarten
  2630.   OB_STATE(hilfe_adr%,helpexit&)=BCLR(OB_STATE(hilfe_adr%,helpexit&),0)
  2631.   PUT x&-4,y&-4,redraw$                         ! redraw
  2632. RETURN
  2633. > PROCEDURE gomonat
  2634.   @week_tree_init
  2635.   @week_pop_up
  2636. RETURN
  2637. > PROCEDURE week_auswahl
  2638.   LOCAL tree_adr%,ex%,n$,n|
  2639.   '
  2640.   ~RSRC_GADDR(0,getweeks&,tree_adr%)              ! Adresse des Objektbaumes ermitteln
  2641.   ~FORM_CENTER(tree_adr%,x%,y%,w%,h%)     ! Objektbaumkoordinaten zentrieren
  2642.   ~FORM_DIAL(0,0,0,0,0,x%,y%,w%,h%)     ! screen reservieren
  2643.   ~FORM_DIAL(1,0,0,0,0,x%,y%,w%,h%)     ! screen growbox
  2644.   IF second!=FALSE
  2645.     ' Texte in den Edit-Feldern vorbelegen
  2646.     pfad$=" "+CHR$(65+GEMDOS(&H19))+":"+DIR$(0)+"\"
  2647.     CHAR{{OB_SPEC(tree_adr%,tellpath&)}}=pfad$
  2648.     CHAR{{OB_SPEC(tree_adr%,week1&)}}="1"
  2649.     CHAR{{OB_SPEC(tree_adr%,week2&)}}="2"
  2650.     CHAR{{OB_SPEC(tree_adr%,week3&)}}="3"
  2651.     CHAR{{OB_SPEC(tree_adr%,week4&)}}="4"
  2652.     CHAR{{OB_SPEC(tree_adr%,week5&)}}="5"
  2653.     CHAR{{OB_SPEC(tree_adr%,mw1&)}}="nicht da"
  2654.     CHAR{{OB_SPEC(tree_adr%,mw2&)}}="nicht da"
  2655.     CHAR{{OB_SPEC(tree_adr%,mw3&)}}="nicht da"
  2656.     CHAR{{OB_SPEC(tree_adr%,mw4&)}}="nicht da"
  2657.     CHAR{{OB_SPEC(tree_adr%,mw5&)}}="nicht da"
  2658.     OB_FLAGS(tree_adr%,week1&)=21               ! editable AUS (29=AN)
  2659.     OB_FLAGS(tree_adr%,week2&)=21
  2660.     OB_FLAGS(tree_adr%,week3&)=21
  2661.     OB_FLAGS(tree_adr%,week4&)=21
  2662.     OB_FLAGS(tree_adr%,week5&)=21
  2663.     OB_FLAGS(tree_adr%,getpath&)=7
  2664.     OB_FLAGS(tree_adr%,weekok&)=0
  2665.     OB_STATE(tree_adr%,weekok&)=0+32+8
  2666.     OB_STATE(tree_adr%,week1&)=0+32+8             ! objecte week1-5 alle AUS
  2667.     OB_STATE(tree_adr%,week2&)=0+32+8             ! und disabled
  2668.     OB_STATE(tree_adr%,week3&)=0+32+8
  2669.     OB_STATE(tree_adr%,week4&)=0+32+8
  2670.     OB_STATE(tree_adr%,week5&)=0+32+8
  2671.   ENDIF
  2672.   '
  2673.   ~OBJC_DRAW(tree_adr%,0,1,x%,y%,w%,h%)   ! Objektbaum zeichnen
  2674.   '
  2675.   ex%=FORM_DO(tree_adr%,0)              ! Objekt mit Exit-Status angeklickt ?
  2676.   '
  2677.   ~FORM_DIAL(2,0,0,0,0,x%,y%,w%,h%)     ! screen shrinkbox
  2678.   ~FORM_DIAL(3,0,0,0,0,x%,y%,w%,h%)     ! screen redraw
  2679.   SELECT ex%
  2680.   CASE week1&
  2681.     OB_FLAGS(tree_adr%,week1&)=29               ! editable AN (21=AUS)
  2682.     OB_FLAGS(tree_adr%,week2&)=29               ! editable AN
  2683.     OB_FLAGS(tree_adr%,week3&)=29
  2684.     OB_FLAGS(tree_adr%,week4&)=29
  2685.     OB_FLAGS(tree_adr%,week5&)=29
  2686.     OB_STATE(tree_adr%,week1&)=0+32             ! 0= aus, 32=shadowed
  2687.     OB_STATE(tree_adr%,week2&)=0+32
  2688.     OB_STATE(tree_adr%,week3&)=0+32
  2689.     OB_STATE(tree_adr%,week4&)=0+32
  2690.     OB_STATE(tree_adr%,week5&)=0+32
  2691.     OB_FLAGS(tree_adr%,weekok&)=7               ! OK-Feld : AN und EXIT
  2692.     OB_STATE(tree_adr%,weekok&)=0+32            ! und shadowed
  2693.     n$=CHAR{{OB_SPEC(tree_adr%,week1&)}}
  2694.     CHAR{{OB_SPEC(tree_adr%,week2&)}}=STR$(VAL(n$)+1)
  2695.     CHAR{{OB_SPEC(tree_adr%,week3&)}}=STR$(VAL(n$)+2)
  2696.     CHAR{{OB_SPEC(tree_adr%,week4&)}}=STR$(VAL(n$)+3)
  2697.     CHAR{{OB_SPEC(tree_adr%,week5&)}}=STR$(VAL(n$)+4)
  2698.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week1&)}}+".KW")
  2699.       CHAR{{OB_SPEC(tree_adr%,mw1&)}}="gefunden"
  2700.     ELSE
  2701.       CHAR{{OB_SPEC(tree_adr%,mw1&)}}="nicht da"
  2702.     ENDIF
  2703.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week2&)}}+".KW")
  2704.       CHAR{{OB_SPEC(tree_adr%,mw2&)}}="gefunden"
  2705.     ELSE
  2706.       CHAR{{OB_SPEC(tree_adr%,mw2&)}}="nicht da"
  2707.     ENDIF
  2708.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week3&)}}+".KW")
  2709.       CHAR{{OB_SPEC(tree_adr%,mw3&)}}="gefunden"
  2710.     ELSE
  2711.       CHAR{{OB_SPEC(tree_adr%,mw3&)}}="nicht da"
  2712.     ENDIF
  2713.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week4&)}}+".KW")
  2714.       CHAR{{OB_SPEC(tree_adr%,mw4&)}}="gefunden"
  2715.     ELSE
  2716.       CHAR{{OB_SPEC(tree_adr%,mw4&)}}="nicht da"
  2717.     ENDIF
  2718.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week5&)}}+".KW")
  2719.       CHAR{{OB_SPEC(tree_adr%,mw5&)}}="gefunden"
  2720.     ELSE
  2721.       CHAR{{OB_SPEC(tree_adr%,mw5&)}}="nicht da"
  2722.     ENDIF
  2723.     @week_auswahl
  2724.   CASE week2&,week3&,week4&,week5&
  2725.     OB_STATE(tree_adr%,week2&)=0+32
  2726.     OB_STATE(tree_adr%,week3&)=0+32
  2727.     OB_STATE(tree_adr%,week4&)=0+32
  2728.     OB_STATE(tree_adr%,week5&)=0+32
  2729.     n$=CHAR{{OB_SPEC(tree_adr%,week2&)}}
  2730.     CHAR{{OB_SPEC(tree_adr%,week2&)}}=STR$(VAL(n$))
  2731.     n$=CHAR{{OB_SPEC(tree_adr%,week3&)}}
  2732.     CHAR{{OB_SPEC(tree_adr%,week3&)}}=STR$(VAL(n$))
  2733.     n$=CHAR{{OB_SPEC(tree_adr%,week4&)}}
  2734.     CHAR{{OB_SPEC(tree_adr%,week4&)}}=STR$(VAL(n$))
  2735.     n$=CHAR{{OB_SPEC(tree_adr%,week5&)}}
  2736.     CHAR{{OB_SPEC(tree_adr%,week5&)}}=STR$(VAL(n$))
  2737.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week2&)}}+".KW")
  2738.       CHAR{{OB_SPEC(tree_adr%,mw2&)}}="gefunden"
  2739.     ELSE
  2740.       CHAR{{OB_SPEC(tree_adr%,mw2&)}}="nicht da"
  2741.     ENDIF
  2742.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week3&)}}+".KW")
  2743.       CHAR{{OB_SPEC(tree_adr%,mw3&)}}="gefunden"
  2744.     ELSE
  2745.       CHAR{{OB_SPEC(tree_adr%,mw3&)}}="nicht da"
  2746.     ENDIF
  2747.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week4&)}}+".KW")
  2748.       CHAR{{OB_SPEC(tree_adr%,mw4&)}}="gefunden"
  2749.     ELSE
  2750.       CHAR{{OB_SPEC(tree_adr%,mw4&)}}="nicht da"
  2751.     ENDIF
  2752.     IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week5&)}}+".KW")
  2753.       CHAR{{OB_SPEC(tree_adr%,mw5&)}}="gefunden"
  2754.     ELSE
  2755.       CHAR{{OB_SPEC(tree_adr%,mw5&)}}="nicht da"
  2756.     ENDIF
  2757.     @week_auswahl
  2758.   CASE getpath&
  2759.     OB_FLAGS(tree_adr%,getpath&)=5
  2760.     OB_FLAGS(tree_adr%,week1&)=29+2               ! editable AN (21=AUS)
  2761.     OB_STATE(tree_adr%,week1&)=0+32             ! 0= aus, 32=shadowed
  2762.     OB_STATE(tree_adr%,getpath&)=0+32
  2763.     second!=TRUE
  2764.     FILESELECT pfad$,"",pfadneu$
  2765.     IF pfadneu$<>""             ! wenn was gewählt wurde
  2766.       CHAR{{OB_SPEC(tree_adr%,tellpath&)}}=pfadneu$
  2767.       pfad$=pfadneu$
  2768.     ENDIF
  2769.     @week_auswahl
  2770.   CASE weekok&
  2771.     OB_STATE(tree_adr%,week1&)=0+32             ! 0= aus, 32=shadowed
  2772.     OB_STATE(tree_adr%,week2&)=0+32             ! objecte alle AUS
  2773.     OB_STATE(tree_adr%,week3&)=0+32
  2774.     OB_STATE(tree_adr%,week4&)=0+32
  2775.     OB_STATE(tree_adr%,week5&)=0+32
  2776.     OB_STATE(tree_adr%,weekok&)=0+32
  2777.   CASE weekcanc&
  2778.     second!=FALSE
  2779.     OB_STATE(tree_adr%,week1&)=0+32             ! 0= aus, 32=shadowed
  2780.     OB_STATE(tree_adr%,week2&)=0+32             ! objecte alle AUS
  2781.     OB_STATE(tree_adr%,week3&)=0+32
  2782.     OB_STATE(tree_adr%,week4&)=0+32
  2783.     OB_STATE(tree_adr%,week5&)=0+32
  2784.     OB_STATE(tree_adr%,weekcanc&)=0             ! nur AUS
  2785.   ENDSELECT
  2786. RETURN
  2787. > PROCEDURE week_laden
  2788.   GET 196,136,444,275+20,redraw$                ! redraw vorbereiten
  2789.   DEFFILL 1,0
  2790.   PBOX 200,140,440,275
  2791.   PBOX 203,143,436,272
  2792.   TEXT 250,170,"Es wird gerade die"
  2793.   TEXT 270,190,"Kalenderwoche"
  2794.   TEXT 280,230,"geladen ..."
  2795.   ERASE week#(),weeksum#(),f_name$()                ! WOCHENMODUL-ARRAYS LÖSCHEN
  2796.   DIM week#(13,4),weeksum#(5,6),f_name$(4)            ! WOCHENMODUL-ARRAYS
  2797.   '
  2798.   ~RSRC_GADDR(0,getweeks&,tree_adr%)              ! Adresse des Objektbaumes ermitteln
  2799.   IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week1&)}}+".KW")
  2800.     f_name$(0)=pfad$+CHAR{{OB_SPEC(tree_adr%,week1&)}}+".KW"
  2801.     @week_einzelfiles_laden(0)
  2802.   ENDIF
  2803.   IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week2&)}}+".KW")
  2804.     f_name$(1)=pfad$+CHAR{{OB_SPEC(tree_adr%,week2&)}}+".KW"
  2805.     @week_einzelfiles_laden(1)
  2806.   ENDIF
  2807.   IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week3&)}}+".KW")
  2808.     f_name$(2)=pfad$+CHAR{{OB_SPEC(tree_adr%,week3&)}}+".KW"
  2809.     @week_einzelfiles_laden(2)
  2810.   ENDIF
  2811.   IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week4&)}}+".KW")
  2812.     f_name$(3)=pfad$+CHAR{{OB_SPEC(tree_adr%,week4&)}}+".KW"
  2813.     @week_einzelfiles_laden(3)
  2814.   ENDIF
  2815.   IF EXIST(pfad$+CHAR{{OB_SPEC(tree_adr%,week5&)}}+".KW")
  2816.     f_name$(4)=pfad$+CHAR{{OB_SPEC(tree_adr%,week5&)}}+".KW"
  2817.     @week_einzelfiles_laden(4)
  2818.   ENDIF
  2819.   PUT 196,136,redraw$                           ! redraw
  2820. RETURN
  2821. > PROCEDURE week_einzelfiles_laden(w|)
  2822.   DIM week_zeilen$(14*7)
  2823.   TEXT 310,210,RIGHT$(f_name$(w|),LEN(f_name$(w|))-RINSTR(f_name$(w|),"\"))
  2824.   OPEN "I",#1,f_name$(w|)                        ! so läuft die routine durch
  2825.   RECALL #1,week_zeilen$(),-1,zeilenanzahl#       ! alle wochen mit inhalt
  2826.   CLOSE
  2827.   FOR i&=0 TO zeilenanzahl#-1 STEP 14              !-->>WOCHENSUMMEN BILDEN
  2828.     ADD week#(0,w|),VAL(week_zeilen$(i&))               !KM
  2829.     ADD week#(1,w|),VAL(week_zeilen$(i&+1))             !KM-DM
  2830.     ADD week#(2,w|),VAL(week_zeilen$(i&+2))             !h-Anf.
  2831.     ADD week#(3,w|),VAL(week_zeilen$(i&+3))             !h-Ende
  2832.     ADD week#(4,w|),VAL(week_zeilen$(i&+4))             !Spesen Tag
  2833.     ADD week#(5,w|),VAL(week_zeilen$(i&+5))             !Spesen Nacht
  2834.     ADD week#(6,w|),VAL(week_zeilen$(i&+6))             !Spesen n. Beleg
  2835.     ADD week#(7,w|),VAL(week_zeilen$(i&+7))             !Nebenkosten
  2836.     ADD week#(8,w|),VAL(week_zeilen$(i&+8))             !Ort
  2837.     ADD week#(9,w|),VAL(week_zeilen$(i&+9))             !h-aussen
  2838.     ADD week#(10,w|),VAL(week_zeilen$(i&+10))           !h-calc
  2839.     ADD week#(11,w|),VAL(week_zeilen$(i&+11))           !button 0  M
  2840.     ADD week#(12,w|),VAL(week_zeilen$(i&+12))           !  "    1  F
  2841.     ADD week#(13,w|),VAL(week_zeilen$(i&+13))           !  "    2  E
  2842.     weeksum#(w|,6)=week#(1,w|)+week#(4,w|)+week#(5,w|)+week#(6,w|)+week#(7,w|)
  2843.   NEXT i&
  2844.   ERASE week_zeilen$()
  2845. RETURN
  2846. > PROCEDURE week_druckausgabe
  2847.   CLS
  2848.   LOCAL w|,a$,x1&,x2&,y1&,y2&,mehrarbeit#
  2849.   FOR n|=0 TO 5         ! weeksum array löschen, sonst doppeltberechnungen
  2850.     FOR m|=0 TO 6
  2851.       weeksum#(n|,m|)=0
  2852.     NEXT m|
  2853.   NEXT n|
  2854.   x1&=WORK_OUT(0)/2-570/2
  2855.   y1&=WORK_OUT(1)/2-180/2
  2856.   x2&=WORK_OUT(0)/2+570/2
  2857.   y2&=WORK_OUT(1)/2+180/2
  2858.   BOX x1&-2,y1&-2,x2&+2,y2&+2
  2859.   BOX x1&,y1&,x2&,y2&
  2860.   TEXT x1&+20,y1&+20,"Kalenderwoche"
  2861.   LINE x1&,y1&+25,x2&,y1&+25
  2862.   TEXT x1&+20,y1&+40,"Kilometergeld"
  2863.   LINE x1&,y1&+45,x2&,y1&+45
  2864.   TEXT x1&+20,y1&+60,"Tagesspesen"
  2865.   LINE x1&,y1&+65,x2&,y1&+65
  2866.   TEXT x1&+20,y1&+80,"Nachtspesen"
  2867.   LINE x1&,y1&+85,x2&,y1&+85
  2868.   TEXT x1&+20,y1&+100,"Spesen n. Bel."
  2869.   LINE x1&,y1&+105,x2&,y1&+105
  2870.   TEXT x1&+20,y1&+120,"Nebenkosten"
  2871.   LINE x1&,y1&+125,x2&,y1&+125
  2872.   TEXT x1&+20,y1&+140,"Zeit Ist-Soll"
  2873.   LINE x1&,y1&+145,x2&,y1&+145
  2874.   LINE x1&,y1&+147,x2&,y1&+147
  2875.   TEXT x1&+20,y1&+170,"Wochensumme"
  2876.   FOR w|=0 TO 4
  2877.     LINE x1&+135+70*w|,y1&,x1&+135+70*w|,y2&
  2878.     IF EXIST(f_name$(w|))
  2879.       mehrarbeit#=0
  2880.       a$=SPACE$(7)
  2881.       RSET a$=RIGHT$(f_name$(w|),LEN(f_name$(w|))-RINSTR(f_name$(w|),"\"))
  2882.       TEXT x1&+140+70*w|,y1&+20,a$
  2883.       TEXT x1&+140+70*w|,y1&+40,STR$(week#(1,w|),7,2)
  2884.       TEXT x1&+140+70*w|,y1&+60,STR$(week#(4,w|),7,2)
  2885.       TEXT x1&+140+70*w|,y1&+80,STR$(week#(5,w|),7,2)
  2886.       TEXT x1&+140+70*w|,y1&+100,STR$(week#(6,w|),7,2)
  2887.       TEXT x1&+140+70*w|,y1&+120,STR$(week#(7,w|),7,2)
  2888.       '
  2889.       weeksum#(5,0)=weeksum#(5,0)+week#(1,w|)      ! berechnung wochensumme kmdm
  2890.       weeksum#(5,1)=weeksum#(5,1)+week#(4,w|)      ! berechnung wochensumme tagessp.
  2891.       weeksum#(5,2)=weeksum#(5,2)+week#(5,w|)      ! berechnung wochensumme nachtsp.
  2892.       weeksum#(5,3)=weeksum#(5,3)+week#(6,w|)      ! berechnung wochensumme n. beleg
  2893.       weeksum#(5,4)=weeksum#(5,4)+week#(7,w|)      ! berechnung wochensumme sonst.
  2894.       weeksum#(w|,6)=week#(1,w|)+week#(4,w|)+week#(5,w|)+week#(6,w|)+week#(7,w|)
  2895.       '
  2896.       mehrarbeit#=TRUNC(week#(10,w|))+FRAC(week#(10,w|))*1.66666
  2897.       mehrarbeit#=-wochenstunden#+mehrarbeit#-mittag#
  2898.       '
  2899.       weeksum#(5,5)=weeksum#(5,5)+mehrarbeit#      ! berechnung wochensumme zeiten
  2900.       '
  2901.       mehrarbeit#=ROUND(TRUNC(mehrarbeit#)+FRAC(mehrarbeit#)*0.6,2)
  2902.       IF ROUND(FRAC(mehrarbeit#),2)=0.6
  2903.         mehrarbeit#=TRUNC(mehrarbeit#)+1
  2904.       ENDIF
  2905.       '
  2906.       TEXT x1&+140+70*w|,y1&+140,STR$(mehrarbeit#,7,2)
  2907.       TEXT x1&+140+70*w|,y1&+170,STR$(weeksum#(w|,6),7,2)
  2908.     ENDIF
  2909.   NEXT w|
  2910.   LINE x1&+135+70*5,y1&,x1&+135+70*w|,y2&
  2911.   TEXT x1&+140+70*5,y1&+20,"  Summen"
  2912.   TEXT x1&+140+70*5,y1&+40,STR$(weeksum#(5,0),8,2)
  2913.   TEXT x1&+140+70*5,y1&+60,STR$(weeksum#(5,1),8,2)
  2914.   TEXT x1&+140+70*5,y1&+80,STR$(weeksum#(5,2),8,2)
  2915.   TEXT x1&+140+70*5,y1&+100,STR$(weeksum#(5,3),8,2)
  2916.   TEXT x1&+140+70*5,y1&+120,STR$(weeksum#(5,4),8,2)
  2917.   '
  2918.   weeksum#(5,5)=ROUND(TRUNC(weeksum#(5,5))+FRAC(weeksum#(5,5))*0.6,2)      !zeiten
  2919.   IF ROUND(FRAC(weeksum#(5,5)),2)=0.6
  2920.     weeksum#(5,5)=TRUNC(weeksum#(5,5))+1
  2921.   ENDIF
  2922.   TEXT x1&+140+70*5,y1&+140,STR$(weeksum#(5,5),8,2)
  2923.   '
  2924.   weeksum#(5,6)=weeksum#(0,6)+weeksum#(1,6)+weeksum#(2,6)+weeksum#(3,6)+weeksum#(4,6) !gesamtsumme
  2925.   TEXT x1&+140+70*5,y1&+170,STR$(weeksum#(5,6),8,2)
  2926.   '
  2927.   DEFTEXT 1,0,0,6
  2928.   TEXT 50,WORK_OUT(1)-20,"TASTE 'ESC' : ZURÜCK ,    TASTE 'H' : HARDCOPY ,    TASTE 'D' : DRUCKER"
  2929.   DO
  2930.     d$=INKEY$
  2931.     IF d$="H" OR d$="h"
  2932.       TEXT 50,WORK_OUT(1)-20,SPACE$(50) ! infotxt weg
  2933.       @select_hardcopy
  2934.       d$=CHR$(27)
  2935.     ENDIF
  2936.     IF d$="D" OR d$="d"
  2937.       TEXT 50,WORK_OUT(1)-20,SPACE$(80) ! infotxt weg
  2938.       woche!=FALSE
  2939.       @auf_formular_drucken
  2940.       d$=CHR$(27)
  2941.     ENDIF
  2942.     EXIT IF d$=CHR$(27)
  2943.   LOOP
  2944.   DEFTEXT 1,0,0,13
  2945.   BMOVE bit_adr%,screen_adr%,screenlen&         ! screen RESTORE
  2946. RETURN
  2947. > PROCEDURE week_pop_up
  2948.   LOCAL tree_adr%,ex%,mx&,my&,mb&,md&
  2949.   '
  2950.   ~RSRC_GADDR(0,weekmenu&,tree_adr%)              ! Adresse des Objektbaumes ermitteln
  2951.   OB_X(tree_adr%,popframe&)=MOUSEX                    ! popframe& ist rahmen
  2952.   OB_Y(tree_adr%,popframe&)=MOUSEY+25
  2953.   IF OB_X(tree_adr%,popframe&)>WORK_OUT(0)-100
  2954.     OB_X(tree_adr%,popframe&)=MOUSEX-150
  2955.   ENDIF
  2956.   IF OB_Y(tree_adr%,popframe&)>WORK_OUT(1)-50
  2957.     OB_Y(tree_adr%,popframe&)=MOUSEY-50
  2958.   ENDIF
  2959.   x%=OB_X(tree_adr%,popframe&)-2
  2960.   y%=OB_Y(tree_adr%,popframe&)-2
  2961.   w%=OB_W(tree_adr%,popframe&)+4
  2962.   h%=OB_H(tree_adr%,popframe&)+4
  2963.   ~FORM_DIAL(0,0,0,0,0,x%,y%,w%,h%)     ! screen reservieren
  2964.   ~FORM_DIAL(1,0,0,0,0,x%,y%,w%,h%)     ! screen growbox
  2965.   ~OBJC_DRAW(tree_adr%,popframe&,1,x%,y%,w%,h%)   ! Objektbaum zeichnen
  2966.   '
  2967.   DO
  2968.     ~GRAF_MKSTATE(mx&,my&,mb&,md&)
  2969.     IF mx&>x% AND mx&<x%+w% AND my&>y% AND my&<y%+h%
  2970.       alt%=ex%
  2971.       ex%=OBJC_FIND(tree_adr%,popframe&,1,mx&,my&)
  2972.       IF ex%>-1
  2973.         IF alt%<>ex%
  2974.           ~OBJC_CHANGE(tree_adr%,weeksel&,0,x%,y%,w%,h%,0,1)
  2975.           ~OBJC_CHANGE(tree_adr%,weekgraf&,0,x%,y%,w%,h%,0,1)
  2976.           ~OBJC_CHANGE(tree_adr%,weekprnt&,0,x%,y%,w%,h%,0,1)
  2977.           ~OBJC_CHANGE(tree_adr%,ex%,0,x%,y%,w%,h%,1,1)
  2978.         ENDIF
  2979.       ENDIF
  2980.     ENDIF
  2981.   LOOP UNTIL MOUSEK<>0
  2982.   IF mx&<x% OR mx&>x%+w% OR my&<y% OR my&>y%+h% ! selected aber außerhalb
  2983.     ex%=-1                                      ! geklickt = abbruch
  2984.   ENDIF
  2985.   '
  2986.   ~FORM_DIAL(2,0,0,0,0,x%,y%,w%,h%)     ! screen shrinkbox
  2987.   ~FORM_DIAL(3,0,0,0,0,x%,y%,w%,h%)     ! screen redraw
  2988.   SELECT ex%
  2989.   CASE weeksel&
  2990.     @week_auswahl
  2991.     IF second!=TRUE
  2992.       @week_laden
  2993.     ENDIF
  2994.   CASE weekgraf&
  2995.     IF second!=TRUE
  2996.       @week_grafik
  2997.     ELSE
  2998.       @week_pop_up
  2999.     ENDIF
  3000.   CASE weekprnt&
  3001.     IF second!=TRUE
  3002.       @week_druckausgabe
  3003.     ELSE
  3004.       @week_pop_up
  3005.     ENDIF
  3006.   ENDSELECT
  3007. RETURN
  3008. > PROCEDURE week_tree_init
  3009.   LET getweeks&=9 !RSC_TREE
  3010.   LET weekmenu&=10 !RSC_TREE
  3011.   LET week1&=2 !Obj in #9
  3012.   LET week2&=3 !Obj in #9
  3013.   LET week3&=4 !Obj in #9
  3014.   LET week4&=5 !Obj in #9
  3015.   LET week5&=6 !Obj in #9
  3016.   LET getpath&=7 !Obj in #9
  3017.   LET tellpath&=8 !Obj in #9
  3018.   LET weekok&=9 !Obj in #9
  3019.   LET weekcanc&=10 !Obj in #9
  3020.   LET mw1&=11 !Obj in #9
  3021.   LET mw2&=12 !Obj in #9
  3022.   LET mw3&=13 !Obj in #9
  3023.   LET mw4&=14 !Obj in #9
  3024.   LET mw5&=15 !Obj in #9
  3025.   LET popframe&=1 !Obj in #10
  3026.   LET weeksel&=2 !Obj in #10
  3027.   LET weekgraf&=3 !Obj in #10
  3028.   LET weekprnt&=4 !Obj in #10
  3029. RETURN
  3030. > PROCEDURE week_grafik
  3031.   CLS
  3032.   LOCAL x1&,x2&,y1&,y2&,h_step&,v_step&,max_sum#,i&,x1g&,x2g&,y1g&,y2g&
  3033.   x1&=WORK_OUT(0)/2-495/2
  3034.   y1&=WORK_OUT(1)/2-180/2
  3035.   x2&=WORK_OUT(0)/2+495/2
  3036.   y2&=WORK_OUT(1)/2+150/2
  3037.   h_step&=(x2&-x1&)/5
  3038.   LINE x1&,y1&,x1&,y2&          ! y-achse
  3039.   LINE x1&,y2&,x2&,y2&          ! x-achse
  3040.   FOR w|=0 TO 4
  3041.     IF weeksum#(w|,6)>max_sum#
  3042.       max_sum#=weeksum#(w|,6)
  3043.     ENDIF
  3044.   NEXT w|
  3045.   max_sum#=ROUND(max_sum#+100,-2)
  3046.   v_step&=(y2&-y1&)/(max_sum#/100)
  3047.   DEFTEXT 1,0,0,6
  3048.   FOR i&=0 TO max_sum#/100                       ! y-achsenbeschriftung
  3049.     LINE x1&,y2&-i&*v_step&,x1&-3,y2&-i&*v_step&
  3050.     IF (EVEN(i&) AND max_sum#>1000) OR max_sum#<1000      ! skip vereinbaren
  3051.       TEXT x1&-40,y2&-i&*v_step&+3,STR$(i&*100)
  3052.     ENDIF
  3053.   NEXT i&
  3054.   DEFTEXT 1,0,0,13
  3055.   DIM x&(3),y&(3)
  3056.   FOR w|=1 TO 5                 ! LINIEN, KW_NAMEN UND DATEN EINTRAGEN
  3057.     LINE x1&+h_step&*w|-h_step&/2,y2&,x1&+h_step&*w|-h_step&/2,y2&+3
  3058.     TEXT x1&+h_step&*w|-h_step&/2-12,y2&+20,RIGHT$(f_name$(w|-1),LEN(f_name$(w|-1))-RINSTR(f_name$(w|-1),"\"))
  3059.     '
  3060.     x1g&=x1&+h_step&*w|-h_step&/2-h_step&/4
  3061.     y1g&=y2&
  3062.     x2g&=x1&+h_step&*w|-h_step&/2+h_step&/4
  3063.     y2g&=y2&-(week#(1,w|-1)/100)*v_step&         ! unten Kilometergeld
  3064.     DEFFILL 1,2,1
  3065.     PBOX x1g&,y1g&,x2g&,y2g&
  3066.     x&(0)=x2g&
  3067.     y&(0)=y1g&
  3068.     x&(1)=x2g&+h_step&/4
  3069.     y&(1)=y1g&-h_step&/4
  3070.     x&(2)=x2g&+h_step&/4
  3071.     y&(2)=y2g&-h_step&/4
  3072.     x&(3)=x2g&
  3073.     y&(3)=y2g&
  3074.     POLYFILL 4,x&(),y&()
  3075.     '
  3076.     y1g&=y2g&                                   ! neue untere kante
  3077.     y2g&=y1g&-(week#(4,w|-1)/100)*v_step&        ! dann Tagesspesen
  3078.     DEFFILL 1,2,2
  3079.     PBOX x1g&,y1g&,x2g&,y2g&
  3080.     x&(0)=x2g&
  3081.     y&(0)=y1g&
  3082.     x&(1)=x2g&+h_step&/4
  3083.     y&(1)=y1g&-h_step&/4
  3084.     x&(2)=x2g&+h_step&/4
  3085.     y&(2)=y2g&-h_step&/4
  3086.     x&(3)=x2g&
  3087.     y&(3)=y2g&
  3088.     POLYFILL 4,x&(),y&()
  3089.     '
  3090.     y1g&=y2g&                                   ! neue untere kante
  3091.     y2g&=y1g&-(week#(5,w|-1)/100)*v_step&        ! dann Nachtspesen
  3092.     DEFFILL 1,2,3
  3093.     PBOX x1g&,y1g&,x2g&,y2g&
  3094.     x&(0)=x2g&
  3095.     y&(0)=y1g&
  3096.     x&(1)=x2g&+h_step&/4
  3097.     y&(1)=y1g&-h_step&/4
  3098.     x&(2)=x2g&+h_step&/4
  3099.     y&(2)=y2g&-h_step&/4
  3100.     x&(3)=x2g&
  3101.     y&(3)=y2g&
  3102.     POLYFILL 4,x&(),y&()
  3103.     '
  3104.     y1g&=y2g&                                   ! neue untere kante
  3105.     y2g&=y1g&-(week#(6,w|-1)/100)*v_step&        ! dann Spesen n. Beleg
  3106.     DEFFILL 1,2,4
  3107.     PBOX x1g&,y1g&,x2g&,y2g&
  3108.     x&(0)=x2g&
  3109.     y&(0)=y1g&
  3110.     x&(1)=x2g&+h_step&/4
  3111.     y&(1)=y1g&-h_step&/4
  3112.     x&(2)=x2g&+h_step&/4
  3113.     y&(2)=y2g&-h_step&/4
  3114.     x&(3)=x2g&
  3115.     y&(3)=y2g&
  3116.     POLYFILL 4,x&(),y&()
  3117.     '
  3118.     y1g&=y2g&                                   ! neue untere kante
  3119.     y2g&=y1g&-(week#(7,w|-1)/100)*v_step&        ! dann Sonstige Spesen
  3120.     DEFFILL 1,2,5
  3121.     PBOX x1g&,y1g&,x2g&,y2g&
  3122.     x&(0)=x2g&
  3123.     y&(0)=y1g&
  3124.     x&(1)=x2g&+h_step&/4
  3125.     y&(1)=y1g&-h_step&/4
  3126.     x&(2)=x2g&+h_step&/4
  3127.     y&(2)=y2g&-h_step&/4
  3128.     x&(3)=x2g&
  3129.     y&(3)=y2g&
  3130.     POLYFILL 4,x&(),y&()        ! Seite
  3131.     DEFFILL 1,2,6
  3132.     x&(0)=x2g&
  3133.     y&(0)=y2g&
  3134.     x&(1)=x2g&+h_step&/4
  3135.     y&(1)=y2g&-h_step&/4
  3136.     x&(2)=x1g&+h_step&/4
  3137.     y&(2)=y2g&-h_step&/4
  3138.     x&(3)=x1g&
  3139.     y&(3)=y2g&
  3140.     POLYFILL 4,x&(),y&()        ! Deckel
  3141.   NEXT w|
  3142.   ERASE x&(),y&()
  3143.   '
  3144.   DEFTEXT 1,0,0,6
  3145.   DEFFILL 1,2,5
  3146.   PBOX x1&,y2&+30,x1&+15,y2&+35
  3147.   TEXT x1&+35,y2&+35,"Sonst. Spesen"
  3148.   DEFFILL 1,2,4
  3149.   PBOX x1&,y2&+40,x1&+15,y2&+45
  3150.   TEXT x1&+35,y2&+45,"Spesen nach Beleg"
  3151.   DEFFILL 1,2,3
  3152.   PBOX x1&,y2&+50,x1&+15,y2&+55
  3153.   TEXT x1&+35,y2&+55,"Übernachtungskosten"
  3154.   DEFFILL 1,2,2
  3155.   PBOX x1&,y2&+60,x1&+15,y2&+65
  3156.   TEXT x1&+35,y2&+65,"Tagesspesen"
  3157.   DEFFILL 1,2,1
  3158.   PBOX x1&,y2&+70,x1&+15,y2&+75
  3159.   TEXT x1&+35,y2&+75,"Kilometergeld"
  3160.   '
  3161.   TEXT 50,WORK_OUT(1)-20,"TASTE 'ESC' : ZURÜCK ,    TASTE 'H' : HARDCOPY"
  3162.   DO
  3163.     d$=INKEY$
  3164.     IF d$="H" OR d$="h"
  3165.       TEXT 50,WORK_OUT(1)-20,SPACE$(50) ! infotxt weg
  3166.       @select_hardcopy
  3167.       d$=CHR$(27)
  3168.     ENDIF
  3169.     EXIT IF d$=CHR$(27)
  3170.   LOOP
  3171.   DEFTEXT 1,0,0,13
  3172.   DEFFILL 1,0,0
  3173.   '
  3174.   BMOVE bit_adr%,screen_adr%,screenlen&         ! screen RESTORE
  3175. RETURN
  3176.